每一个SQL Server安全对象(Securable)都有相应的权限(Permission)被授予到安全主体(Principal)上,在服务器级别上,使用Login和Server Role来管理权限;在数据库级别上,使用User和Database Role来管理权限。
一,权限命名约定
一下列表列出权限的一般约定:
- CONTROL:是最高的权限,在被授予者身上赋予近似所有者的权限,被授予者实际上拥有对安全对象(Securable)的所有权限。已被授予CONTROL权限的主体(Principal)也可以授予对安全对象的权限。 由于SQL Server安全模型是分层的,因此特定范围内的CONTROL隐式包括该范围下所有安全对象的CONTROL。 例如,对数据库的CONTROL意味着对数据库的所有权限,对数据库中所有程序集的所有权限,对数据库中所有Schema的所有权限以及对数据库内所有Schema中的对象的所有权限。
- IMPERSONATE:模拟指定的Login或User的权限
- EXECUTE:调用模块(函数,存储过程等)的权限
- DELETE、INSERT、SELECT和 UPDATE:对数据库对象执行修改和查询的权限
- VIEW DEFINITION:查看对象元数据的权限
- ALTER:对安全对象执行alter、create或drop命令的权限,
- CREATE :创建对象的权限
- REFERENCES:引用数据库对象的权限,包括外键、密钥、架构绑定的函数等
二,权限的层次结构和可传递性
权限具有父子层次结构,并且可以沿着层次结构由上向下传递,这意味着,如果被授予顶层的权限,那么同样被授予对顶层之下所有子对象的权限。
举个例子,如果User被授予数据库的select权限,那么User可以select数据库中的所有schema;如果User被授予schema的select权限,那么实际上,User能够对该schema下的所有子对象,包括table和view,执行select命令。由于权限是可以沿着层次结构传递,这就意味着,如果User被授予数据库的select权限,他可以查看该数据库的任意table和view。
三,权限管理
GRANT 用于授予权限,对授予的权限可以使用REVOKE来回收。
DENY 用于移除权限
四,权限列表
返回服务器的内置权限层次结构的描述,sys.fn_builtin_permissions只能在SQL Server和Azure SQL数据库上调用,并且它将返回所有权限,无论当前平台是否支持它们。 大多数权限适用于所有平台,但有些不适用于所有平台。
sys.fn_builtin_permissions ( [ DEFAULT | NULL ] | empty_string | '<securable_class>' } )
返回特定安全对象(Securable)上实际被授予权限的安全主体(Principal):
fn_my_permissions ( securable , 'securable_class' )
参考文档: