场景1:

日常工作中我们需要对某一张表或者视图给某一个人开通访问权限一般的操作步骤如下:

  1. 在服务器的安全性下的登录名内创建登录名。

sql server查看本地用户 sql server 查看用户_sql server查看本地用户

2.在用户映射界面指定需要对哪个数据库访问,并指定Public角色。

sql server查看本地用户 sql server 查看用户_sql_02

 

通过以上两步然后确定,这时这个账号就能访问这个数据库(注意:这时并不具备任何访问权限)

sql server查看本地用户 sql server 查看用户_database_03

3.以管理员身份进入这个数据库继续对刚刚创建的Test2账号进行权限配置;

sql server查看本地用户 sql server 查看用户_database_04

这样配置完成之后,test2账号就已经有了相应的表的查询权限。

场景2

我有无数的这样的账号,需要配置相同的权限?怎么办呢。如果还用上述的方案,似乎维护起来也太过复杂,别急:微软的SQL Server 给我们提供了角色的概念(需要特别注意:角色只能是数据库级别的,暂时还没有办法建立一个服务器级别的角色),我们只需要在数据库中创建相应的自定义角色,然后将账号从原来的勾选Public的同时勾选创建的自定义角色即可实现。

同样如上场景1可以按照如下操作;

  1. 创建角色在数据库中创建角色Role1 并赋予AddressType表只读权限;

sql server查看本地用户 sql server 查看用户_sql server查看本地用户_05

sql server查看本地用户 sql server 查看用户_database_06

点击确定保存,角色创建成功。

2.创建用户并勾选该角色

sql server查看本地用户 sql server 查看用户_数据库_07

点击确定,这样该用户即可有该表的AddressType的查询权限,如果还有新的用户就可以直接添加用户,勾选角色,不用在一个个勾选权限了。

当然我们可以将以上操作快速转换成SQL脚本,用于执行,如下图点击脚本即可快速看到生成的SQL脚本任务。

场景3:

我们目前有两个角色两个账号:如下表格

角色

权限

此角色的成员(用户)

Role1

查询AddressType表

Test1

Role2

查询DatabaseLog表

Test2

3.1用户同时访问两个角色

我们需要test1同时访问两张表,拿只需要对test1账号同时勾选两个角色如下图即可实现;

sql server查看本地用户 sql server 查看用户_database_08

 

3.2角色用户批量赋予另一个角色

我们需要Role2的所有人具有Role1的权限,那需要将Role2加入到Role1中:如下图:

sql server查看本地用户 sql server 查看用户_数据库_09

这样未来即使Role2中新加用户也会同时具有Role1的权限。

注意:这里只是能够做到类似Role2中的所有用户同时具有了Role1Role2两个角色而已,类似选中用户同时勾选两个角色,Role1Role2的权限本身还是独立存在的。

场景4.

我们是否可以按照如下方式规划角色和权限?

角色

权限

此角色的成员(用户)

此角色的成员(角色)

Role1

查询AddressType表

Test1


Role2

查询DatabaseLog表

Test2


Role3

Test3

Role1,Role2

如上场景3所描述,Role3中增加Role1和Role2,只是代表着Test1和Test2账号同时拥有了Role1(Role2)和Role3的权限而已,并不代表着Role3会拥有和Role1和Role2一样的权限。

因此以上设置结果会是Test3没有任何权限。