我们有一个在MSAccess中运行的应用程序,但使用SQL Server作为后端数据库。这将生成一个查询来检查它有权访问哪些视图,对于普通用户来说,这需要18秒的时间。对于作为db_owner角色成员的所有用户,这需要0.2秒。有没有什么方法可以为普通用户调优?也许我可以在Access中做些什么?我不想给他们提供db_owner,而且重写应用程序以不使用访问权限也是不可能的。
下面是查询:
select
object_name(id),
user_name(uid), type,
ObjectProperty(id, N'IsMSShipped'),
ObjectProperty(id, N'IsSchemaBound')
from sysobjects
where type = N'V'
and permissions(id) & 4096 <> 0使用MS Access 2003、SQL Server2008 R2
发布于 2012-04-15 13:07:02
如果找不到问题的根本原因,或许一个变通办法可能会有所帮助?这只是一个想法:您可以将SQL语句封装在db_owner拥有的进程中,并为其提供一个EXECUTE AS子句。这样,当非db_owner调用proc时,proc中的db_owner将在proc的持续时间和作用域的模拟下执行。希望您的非db_owner用户能够从db_owner运行该SQL时看到的性能中受益。
发布于 2014-09-26 22:11:10
参加派对有点晚了,但试试这个:
select
[name],
schema_name(schema_id),
[type],
Is_MS_Shipped,
Is_Schema_published
from
sys.all_views
where
not permissions(object_id) & 4096 = 0使用视图特定的对象并反转比较可能会给您带来轻微的改进
发布于 2014-09-26 22:30:33
让我猜猜:您有一个Access-ADP应用程序在启动时执行此操作。我们有完全一样的东西。此查询用于获取Access稍后使用的元数据。问题的根本原因是不推荐使用的权限函数:
http://msdn.microsoft.com/en-us/library/ms186915.aspx
引用:“继续使用权限功能可能会导致性能降低。”
由于您既不能更改查询,也不能更改函数,因此您的运气不佳。
我建议你考虑使用带有链接表的ACCDB,因为Access 2013取消了对ADP的支持。
https://stackoverflow.com/questions/10124547
复制相似问题