SQL Server中db_ddladmin是否拥有读写权限及与相关角色的从属关系
SQL Server db_ddladmin角色权限问题解答
问题1:db_ddladmin角色是否拥有db_datareader对应的数据读取权限、db_datawriter对应的数据写入权限?
默认没有。db_ddladmin是SQL Server官方提供的内置数据库级角色,核心授权范围仅覆盖数据定义语言(DDL)类操作:包括创建/修改/删除表、视图、存储过程、索引等数据库对象,调整对象所属架构,管理DDL触发器等,默认没有任何用户数据的读写权限。
举个实际场景:仅被授予db_ddladmin角色的用户,即便可以新建一张业务表,也默认无法查询该表的数据,也不能对表做增删改操作,除非额外授予对应用户数据的读写权限,或者将用户加入db_datareader/db_datawriter角色。
你可以通过以下SQL查询内置角色的默认权限自行验证:
SELECT permission_name, state_desc FROM sys.database_permissions dp JOIN sys.database_principals dpri ON dp.grantee_principal_id = dpri.principal_id WHERE dpri.name = 'db_ddladmin'
问题2:db_datareader、db_datawriter是否属于db_ddladmin角色的子集?
不属于,三个角色是完全独立的权限集合,互相没有包含关系:
db_ddladmin:仅拥有DDL操作权限,无用户数据读写权限db_datareader:仅拥有全库所有用户表的查询权限,无DDL操作权限db_datawriter:仅拥有全库所有用户表的增删改权限,无DDL操作权限
如果需要同时持有DDL操作权限和全库数据读写权限,需要将用户同时加入上述三个角色,或者单独授予对应的组合权限。
内容的提问来源于stack exchange,提问作者Abimanyu
相关产品推荐
相关产品推荐

