Pse*_*oad 5 sql-server permissions statistics sql-server-2008-r2 linked-server
我试图更好地了解 SQL Server 如何使用远程 SQL Server(例如链接服务器)上的统计信息。我知道用户需要 db_owner/db_ddladmin 权限才能使用远程框上的统计信息。起初,根据 Microsoft 的以下文本,这似乎非常简单。
要在链接服务器上使用表时创建最佳查询计划,查询处理器必须具有来自链接服务器的数据分布统计信息。对表的任何列具有有限权限的用户可能没有足够的权限来获取所有有用的统计信息,并且可能会收到效率较低的查询计划并体验较差的性能。如果链接服务器是 SQL Server 的实例,要获取所有可用的统计信息,用户必须拥有该表或者是链接服务器上的 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员.
让我困惑的是“用户”这个词。我们为所有连接而不是用户登录使用标准安全上下文。此登录名/用户具有上述对相关数据库的定义所需的权限。此外,我们不使用模拟。
我曾尝试使用在删除服务器上具有和未具有提升权限的帐户运行查询并捕获两端的跟踪。在我看来,远程服务器不会收集统计信息,除非实际用户(键盘上的那个人)拥有提升的权限。我相信这是真的,因为当用户拥有所需的权限时,我只会看到对 sys.sp_table_statistics2_rowset 的调用。
我真的希望这是有道理的。
有没有人了解这在 SQL 2008 R2 及更低版本中的实际工作原理?
我做的是这个“技巧”:
读取这个“链接用户”,无论其他需要什么和 ddl_admin权限,然后运行以下脚本以确保实际上没有任何ddl_admin权限可以使用。
但是作为技术上的成员,ddl_admin用户现在可以在远程数据库中查看统计信息!(注意:从 SQL2012SP1 开始,不需要这个 hack,统计数据应该是可见的)
DENY CREATE TABLE TO [LinkUser]
DENY CREATE VIEW TO [LinkUser]
DENY CREATE PROCEDURE TO [LinkUser]
DENY CREATE FUNCTION TO [LinkUser]
DENY CREATE RULE TO [LinkUser]
DENY CREATE DEFAULT TO [LinkUser]
DENY CREATE TYPE TO [LinkUser]
DENY CREATE ASSEMBLY TO [LinkUser]
DENY CREATE XML SCHEMA COLLECTION TO [LinkUser]
DENY CREATE SCHEMA TO [LinkUser]
DENY CREATE SYNONYM TO [LinkUser]
DENY CREATE AGGREGATE TO [LinkUser]
DENY CREATE MESSAGE TYPE TO [LinkUser]
DENY CREATE SERVICE TO [LinkUser]
DENY CREATE CONTRACT TO [LinkUser]
DENY CREATE REMOTE SERVICE BINDING TO [LinkUser]
DENY CREATE ROUTE TO [LinkUser]
DENY CREATE QUEUE TO [LinkUser]
DENY CREATE SYMMETRIC KEY TO [LinkUser]
DENY CREATE ASYMMETRIC KEY TO [LinkUser]
DENY CREATE FULLTEXT CATALOG TO [LinkUser]
DENY CREATE CERTIFICATE TO [LinkUser]
DENY CREATE DATABASE DDL EVENT NOTIFICATION TO [LinkUser]
DENY CHECKPOINT TO [LinkUser]
DENY ALTER ANY SCHEMA TO [LinkUser]
DENY ALTER ANY ASSEMBLY TO [LinkUser]
DENY ALTER ANY DATASPACE TO [LinkUser]
DENY ALTER ANY MESSAGE TYPE TO [LinkUser]
DENY ALTER ANY CONTRACT TO [LinkUser]
DENY ALTER ANY SERVICE TO [LinkUser]
DENY ALTER ANY REMOTE SERVICE BINDING TO [LinkUser]
DENY ALTER ANY ROUTE TO [LinkUser]
DENY ALTER ANY FULLTEXT CATALOG TO [LinkUser]
DENY ALTER ANY SYMMETRIC KEY TO [LinkUser]
DENY ALTER ANY ASYMMETRIC KEY TO [LinkUser]
DENY ALTER ANY CERTIFICATE TO [LinkUser]
DENY REFERENCES TO [LinkUser]
DENY ALTER ANY DATABASE DDL TRIGGER TO [LinkUser]
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO [LinkUser]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2994 次 |
| 最近记录: |