权限是执行操作、访问数据的通行证。只有拥有了针对某种安全对象的指定权限,才能对该对象执行相应的操作。 一、SQL Server安全相关概念 权限管理指将安全对象的权限授予主体,取消或禁止主体对安全对象的权限。SQLServer通过验证主体是否已获得适当的权限来控制主体对安全对象执行的操作。 1.主体 “主体”是可以请求SQLServer资源的个体、组和过程。主体分类如表所示。
2.安全对象 安全对象是SQLServer Database Engine 授权系统控制对其进行访问的资源。每个SQL Server安全对象都有可能授予主体的关联权限,如表所示。
3.架构 架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。在SQLServer 2008中,架构独立于创建它们的数据库用户而存在。可以在不更改架构名称的情况下转让架构的所有权。 完全限定的对象名称包含4部分:server.database.schema.object。 SQLServer 2008还引入了“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在SQL Server 2008中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用CREATE USER和ALTER USER的DEFAULT_SCHEMA选项设置和更改默认架构。如果未定义默认架构,则数据库用户将把DBO作为其默认架构。 【例】下面代码创建了用户“Jane”,默认架构为“Sales”,并设置其拥有数据库“db_ddladmin”角色。
这样Jane所做的任何操作默认发生在“Sales”架构上,她所创建的对象默认属于“Sales”架构,所引用的对象默认在“Sales”架构上。当她执行以下语句时:
该存储过程创建在“Sales”架构上,其他用户引用它时需要使用“Sales.usp_GetCustomers”。 4.权限 在SQLServer 2008中,能够授予的安全对象和权限的组合有181种,具体的GRANT、DENY、REVOKE语句格式和具体的安全对象有关。使用时请参阅联机丛书。主要安全对象权限如表所示。
二、SQL Server 管理 1. 权限分类 在Microsoft SQL Server 2008系统中,不同的对象有不同的权限。为了更好地理解权限管理的内容,下面从权限的类型、常用对象的权限、隐含的权限、授予权限、收回权限、否认权限等几个方面介绍。 在Microsoft SQL Server 2008系统中,不同的分类方式可以把权限分成不同的类型。如果依据权限是否预先定义,可以把权限分为预先定义的权限和预先未定义的权限。 预先定义的权限是指那些系统安装之后,不必通过授予权限即拥有的权限。 预先未定义的权限是指那些需要经过授权或继承才能得到的权限。
如果按照权限是否与特定的对象有关,可以把权限分为针对所有对象的权限和针对特殊对象的权限。针对所有对象的权限表示这种权限可以针对SQL Server系统中所有的对象,例如,CONTROL权限是所有对象都有的权限。 针对特殊对象的权限是指某些权限只能在指定的对象上起作用,例如INSERT可以是表的权限,但是不能是存储过程的权限,而EXECUTE可以是存储过程的权限,但是不能是表的权限。下面,详细讨论这两种权限类型。 在Microsoft SQL Server 2008系统中,针对所有对象的权限包括CONTROL、ALTER、ALTER ANY、TAKE OWNERSHIP、INPERSONATE、CREATE、VIEW DEFINITION等。 3.常用对象的权限 在使用GRANT语句、REVOKE语句、DENY语句执行权限管理操作时,经常使用ALL关键字表示指定安全对象的常用权限。 不同的安全对象往往具有不同的权限。 3.授权管理 在Microsoft SQL Server 2008系统中,可以使用GRANT语句将安全对象的权限授予指定的安全主体。这些可以使用GRANT语句授权的安全对象包括应用程序角色、程序集、非对称密钥、证书、约定、数据库、端点、全文目录、函数、消息类型、对象、队列、角色、路由、架构、服务器、服务、存储过程、对称密钥、系统对象、表、类型、用户、视图和XML架构集合等。 GRANT语句的语法是比较复杂的,不同的安全对象有不同的权限,因此也有不同的授权方式。 4.使用Tractans-SQL管理权限 在SQLServer中使用GRANT、REVOKE和DENY 这3种命令来管理权限。 (1)GRANT用来把权限授予某一用户,以允许该用户执行针对该对象的操作,如UPDATE、SELECT、DELETE、EXECUTE。或允许其运行某些语句,如CREATETABLE、CREATEDATABASE。 其简化语法格式为: GRANT{ ALL [ PRIVILEGES ] } | permission [ ( column [ ,...n ] ) ] [,...n ] [ ON[ class :: ] securable ] TO principal [ ,...n ] [ WITH GRANT OPTION ] [ AS principal ] 【例1】授予用户“User1”对数据库的CREATE TABLE权限。 GRANT CREATE TABLE TO User1; 【例2】授予用户“User1i”对数据库的CREATE VIEW权限并使该用户具有为其他主体授予CREATE VIEW的权限。 GRANT CREATE VIEW TO User1 WITH GRANT OPTION; 【例3】授予用户“User1i”对表“Student”的SELECT权限。 GRANT SELECT ON Student TO User1; (2)REVOKE用于取消用户对某一对象或语句的权限,这些权限是经过GRANT语句授予的。其语法格式和GRANT一致。 【例4】从用户“User1”以及“User1”已授予VIEW DEFINITION权限的所有主体中撤消对数据库的VIEW DEFINITION权限。 REVOKE VIEW DEFINITION FROM User2 CASCADE; 【例5】撤销用户“User1”对表“Student”的SELECT权限。 REVOKE SELECT ON Studnet FROM User1; (3)DENY用来禁止用户对某一对象或语句的权限,明确禁止其对某一用户对象,执行某些操作。其语法格式和GRANT一致。 【例6】拒绝用户“User1”对数据库中表“Studnet”的“SELECT”权限。 DENY SELECT ON Studnet TO User1; | ||||||||||||||||||||||||||||
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|