Security9:权限(Permission)

每一个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' ) 

参考文档:

Permissions (Database Engine)

Getting Started with Database Engine Permissions

原文地址:https://www.cnblogs.com/ljhdo/p/12919963.html