SQL Server 2012 角色链式授权
实验课上,要求将一个角色的权限授予另一个角色。
在咕果上搜了老半天,结果只找到怎么把角色赋予用户。(汗,怎么这波技术含量这么低)
然后找到了ALTER ROLE ADD MEMBER
和EXEC sp_roleaddmember
两个指令用于添加用户至角色。
用法:
ALTER ROLE <role-name> ADD MEMBER <user-name>
EXEC sp_roleaddmember [@rolename=]<role-name>, [@membername=]<user-name>
根据StackOverflow上该回答中一位用户所言,两者在SQL Server 2012中没有区别,参考资料如下: https://msdn.microsoft.com/en-us/library/ms189775.aspx https://msdn.microsoft.com/en-us/library/ms187750.aspx
但是在使用时,惊奇的发现在可以将Role作为参数填入以上操作的user-name
部分,可以正常执行不会报错。
在子角色(user-name
)的所有权限中查不到父角色(role-name
)的权限,但是在父角色的成员表中可以看到子角色。
经过尝试后,发现直接对用户赋予子角色时,会自动给用户注册一个父角色的权限。
也就是说,直接把需要附加给角色的角色权限作为该角色的父角色,数据库便会在执行指令时自动赋予其父角色的权限。
例:
有两个角色,JuniorRole
和SeniorRole
,要将JuniorRole
的权限赋予SeniorRole
(显然高级用户通常应该拥有初级用户的全部权限),在SQL Server中可以这么做:
ALTER ROLE JuniorRole ADD MEMBER SeniorRole;
之后在进行用户授权时,ALTER ROLE SeniorRole add SeniorUser
不仅会为SeniorUser
赋予SeniorRole
的角色,还会为其赋予JuniorRole
的角色,目的达成。