Security2:角色和权限

权限的授予分为三部分:权限(Permission),安全对象(Securable)和安全主体(Principal),这三个术语之间的关系是:Grant Permission on Securable to Principal,通俗地解释是:授予Principal操作Securable的Permission。Principal是被授予权限的实体,Securable是table,view等对象,是Principal操作的对象;有时Principal也会作为Securable,被其他Principal操纵。

一,Role 作为 Principal,被授予权限

查看Permission列表,点击:Permissions (Database Engine),这里列出的是单个权限(Individual permission),role 是权限的集合。

1, 创建角色

Role分为数据库角色和服务器角色,AUTHORIZATION owner_name 子句用于指定角色Owner

CREATE ROLE role_name 
AUTHORIZATION owner_name

CREATE SERVER ROLE role_name 
AUTHORIZATION server_principal

角色的所有者,在删除所有者之前,必须修改角色的所有者关系,经常把角色的所有者设置为dbo:

ALTER AUTHORIZATION 
ON ROLE::[role_name] TO [dbo]

如果数据库用户拥有一个role,在删除用户时,数据库将抛出错误:

The database principal owns a database role and cannot be dropped.

2,将权限授予角色,角色是权限的集合

Role作为一个Principal,可以使用Grant子句为role授予权限,这里为role授予Object的Permissions

Security2:角色和权限
GRANT <permission> [ ,...n ] 
ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO <database_principal> [ ,...n ] 
[ WITH GRANT OPTION ]

<database_principal> ::= Database_user | Database_role
Security2:角色和权限

3,为角色增加或删除一个用户成员

ALTER [Server] ROLE role_name
{
      [ ADD MEMBER database_principal ]
    | [ DROP MEMBER database_principal ]
}

4,示例,授予数据库角色访问table的权限

grant ALTER,DELETE,INSERT,SELECT,UPDATE  --Permission List
on dbo.dt_test    --Table Name
to dabase_level_role    --Role Name
with GRANT OPTION 

二,Role 作为Securable,Principal授予操纵Role的权限

Role 可以是数据库的安全主体(Principal),被授予权限;Role可以是数据库的安全对象(Securable),Grant子句可以授予Principal操纵Role的权限。

Security2:角色和权限
GRANT permission [ ,...n ]  
    ON 
    {  [ USER :: database_user ]
      | [ ROLE :: database_role ]
    }
    TO <database_principal> [ ,...n ]
    [ WITH GRANT OPTION ]

<database_principal> ::= Database_user | Database_role 
Security2:角色和权限

1,Granting CONTROL permission on a user to another user

GRANT CONTROL 
ON USER::Wanida 
TO RolandX;

2,Granting VIEW DEFINITION permission on a role to a user with GRANT OPTION

GRANT VIEW DEFINITION 
ON ROLE::SammamishParking 
    TO JinghaoLiu  
WITH GRANT OPTION;

三,数据库对象权限

对数据库对象的权限控制,粒度是表列,数据行是对象的所有数据行。

Security2:角色和权限
GRANT <permission> [ ,...n ] ON 
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
    TO <database_principal> [ ,...n ] 
    [ WITH GRANT OPTION ]
    [ AS <database_principal> ]

<database_principal> ::= Database_user | Database_role 
Security2:角色和权限

对象的权限列表:

  • Scalar function permissions: EXECUTE, REFERENCES.
  • Table-valued function permissions: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
  • Stored procedure permissions: EXECUTE.
  • Table permissions: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
  • View permissions: DELETE, INSERT, REFERENCES, SELECT, UPDATE.

1,Granting SELECT permission on a table

GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;

2,Granting EXECUTE permission on a stored procedure

GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
    TO Recruiting11;

四,使用固定数据库角色授权,授予某个User只读数据的权限

Step1,在SQL Server中为该用户创建一个Login和User,在创建User时,建立Login 和 User 之间的Mapping 关系。

由于权限是授予user的,所以必须使用Use 子句切换到当前db中

Security2:角色和权限
--create Login Name
create login [domain\login]        
from windows;

use current_db_name
go
--create --UserName
Create User DWReadOnly            
for login [domain\login]
Security2:角色和权限

Step2,使用DB的Fixed Role

db_datareader :Members of the db_datareader fixed database role can read all data from all user tables.

只需要将User 添加到DB的 db_datareader 中,那么这个User 就能 只能 read 所有的User table,而不会修改任何数据。

step3,使用Alter Role 授予user 只读权限

--Grant readonly
ALTER ROLE [db_datareader] 
add MEMBER DWReadOnly

如果要授予Server Role(服务器角色)权限,授予权限的Principal 是Login。

create login [domain\username]
from windows;

alter server role sysadmin
add member [domain\username];

五,固定角色

1,数据库级别的固定角色

在DB级别最高的权限是db_owner角色,拥有数据库的最高权限:control database

db_owner:Members of the db_owner fixed database role can perform all configuration and maintenance activities on the database, and can also drop the database.

2,服务器级别的固定角色

在服务器级别,最高的权限是sysadmin,能够在服务器中中执行任何操作。

sysadmin:Members of the sysadmin fixed server role can perform any activity in the server.

3,特殊的public 角色

public角色分为:服务器级别的public角色和数据库级别的public角色,public角色属于固定角色,但是其特殊之处在于:权限可以被修改。

每个 SQL Server 登录均属于 public 服务器角色,所有的数据库用户都属于public数据库角色。用户不能删除public角色,但是,可以授予或收回public角色的权限。默认情况下,public角色被分配很多权限,大部分权限都跟数据库中的日常操作有关。
如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public 角色的权限。当希望该对象对所有用户可用时,只需对任何对象分配 public 权限即可。默认情况下,所有的数据库用户都属于public角色,因此,授予或回收public角色的权限,将会影响所有的用户。

 

参考文档:

GRANT Object Permissions (Transact-SQL)

GRANT Database Principal Permissions (Transact-SQL)

GRANT Database Permissions (Transact-SQL) 

Database-Level Roles

Server-Level Roles

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: Security





本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/5176024.html,如需转载请自行联系原作者
上一篇:JAVA MAIL发送邮件实例


下一篇:comet4j java服务端推送消息到web页面实例