用户无法在 SSMS 中查看非默认架构中的表

eyk*_*nal 11 sql-server-2008 security sql-server permissions ssms

我在VIEW DEFINITION为我的一个用户在架构级别适当设置权限时遇到问题。我已经创建了架构TestSchema并添加了一些表。用户目前有权限设置为访问和修改表(SELECTUPDATEDELETE通过等)dbo_datareaderdbo_datawriter角色。但是,他们看不到 SSMS 对象资源管理器中的任何表。

我试过授予查看定义的权限:

grant view definition on SCHEMA :: [TestSchema] to [User]
Run Code Online (Sandbox Code Playgroud)

那没有用。我尝试设置表级权限:

grant view definition on [TestSchema].[NewTable] to [User]
Run Code Online (Sandbox Code Playgroud)

那也没有用。然后我尝试了一个全面的资助:

grant view definition to [User]
Run Code Online (Sandbox Code Playgroud)

确实奏效了;他们现在可以看到TestSchema,以及他们不应该访问的其他模式。

我的目标是允许用户查看给定模式中的所有表。我如何做到这一点?如果默认情况下我应该能够执行此操作,我应该查看哪些权限才能找到为什么不能执行此操作?

Gre*_*ker 13

简短回答:不要使用db_datareaderdb_datawriter或它们的拒绝等价物。它们仅用于向后兼容。使用它们会导致您面临的问题。

如果您想授予主体 Alice 对架构 Sales 中所有表值对象的 SELECT、INSERT、UPDATE 和 DELETE 权限,请使用以下命令。

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;
Run Code Online (Sandbox Code Playgroud)

如果您想为主体 Alice 授予对所有模式中所有表值对象的 SELECT、INSERT、UPDATE 和 DELETE 权限,请使用以下命令。

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;
Run Code Online (Sandbox Code Playgroud)

然后元数据可见性将正常工作。