架构和用户权限

Bet*_*per 4 schema sql-server permissions users

当我们自定义的、自产的 CMS 使用 GUI 创建数据表时,它会根据特定于站点的用户模式(即sitename)而不是模式创建它们dbo

问题是我们的站点特定用户目前没有“看到”这些其他模式,即使他们在db_owner角色中。因此,某处缺少权限设置,这将授予他们对这些表进行读写的能力。 

迁移到新的 SQL 服务器时发生了此问题。从 2005 工作组版到 2008 网络版。

Aar*_*and 5

它可以很简单:

GRANT SELECT ON SCHEMA::[sitename] TO [user];
Run Code Online (Sandbox Code Playgroud)

如果有程序和函数,您还需要:

GRANT EXECUTE ON SCHEMA::[sitename] TO [user];
Run Code Online (Sandbox Code Playgroud)

文档中列出了适用于架构级别的完整权限列表:

您还可以为任何用户设置默认架构,这在某些情况下可能会有所帮助(例如,如果他们在没有明确指定sitename架构的情况下创建表):

ALTER USER [user] WITH DEFAULT_SCHEMA = [sitename];
Run Code Online (Sandbox Code Playgroud)

请注意,DENY覆盖GRANT(并且还覆盖角色成员资格权限,包括db_owner),因此请检查以确保没有人无意中阻止了对架构的访问。如果您在此处找到任何行,则可以开始调查:

SELECT * FROM sys.database_permissions
  WHERE class_desc = N'SCHEMA' AND [state] = 'D';
Run Code Online (Sandbox Code Playgroud)

请注意,权限可以间接应用于用户(例如,通过 AD 组成员身份或数据库角色),因此请确保您遵循具有相关...的任何数据库主体的面包屑DENY