创建角色,用户,权限只能访问指定数据库

创建角色,用户,权限  PS: 具体到哪些表 视图,不能是数据库
 
/* --示例说明
         示例在数据库pubs中创建一个拥有表jobs的所有权限、拥有表titles的 SELECT 权限的角色r_test
     随后创建了一个登录l_test,然后在数据库pubs中为登录l_test创建了用户账户u_test
     同时将用户账户u_test添加到角色r_test中,使其通过权限继承获取了与角色r_test一样的权限
     最后使用DENY语句拒绝了用户账户u_test对表titles的 SELECT 权限。
     经过这样的处理,使用l_test登录SQL Server实例后,它只具有表jobs的所有权限。
--*/
 
USE pubs
 
--创建角色 r_test
EXEC  sp_addrole  'r_test'
 
--授予 r_test 对 jobs 表的所有权限
GRANT  ALL  ON  jobs  TO  r_test
--授予角色 r_test 对 titles 表的 SELECT 权限
GRANT  SELECT  ON  titles  TO  r_test
 
--添加登录 l_test,设置密码为pwd,默认数据库为pubs
EXEC  sp_addlogin  'l_test' , 'pwd' , 'pubs'
 
--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
EXEC  sp_grantdbaccess  'l_test' , 'u_test'
 
--添加 u_test 为角色 r_test 的成员
EXEC  sp_addrolemember  'r_test' , 'u_test'
 
--拒绝安全账户 u_test 对 titles 表的 SELECT 权限
DENY  SELECT  ON  titles  TO  u_test
 
/* --完成上述步骤后,用 l_test 登录,可以对jobs表进行所有操作,但无法对titles表查询,虽然角色 r_test 有titles表的select权限,但已经在安全账户中明确拒绝了对titles的select权限,所以l_test无titles表的select权限--*/
 
--从数据库 pubs 中删除安全账户
EXEC  sp_revokedbaccess  'u_test'
 
--删除登录 l_test
EXEC  sp_droplogin  'l_test'
 
--删除角色 r_test
EXEC  sp_droprole  'r_test'






==================================================

1,在sql server中选择好要操作的数据库


2,--当前数据库创建角色 
exec sp_addrole 'seeview'      --创建了一个数据库角色,名称为:[seeview]


3,--分配视图权限 GRANT SELECT  ON veiw TO [角色] 

--指定视图列表 指定seeview这个角色可以查看的视图表名称;也就是这个角色可以查看下面赋予这些视图信息,除此之外的所有的东西都看不到
GRANT SELECT ON  v_viewname1 TOseeview
GRANT SELECT ON  v_viewname2  TO seeview


4,--添加只允许访问指定视图的用户: exec sp_addlogin '登录名','密码','默认数据库名' 

exec sp_addlogin 'per','p123','oa'

此处可能执行不了,要求密码强度,那就自己手工创建


5,--添加只允许访问指定视图的用户到rCRM角色中: exec sp_adduser '登录名','用户名','角色' 
exec sp_adduser 'per','p123','seeview'


注:一次完成以上操作以后,就可以实现创建一个用户,并且只让这个用户查看指定视图中的信息。







=============================================


背景

客户的SQL Server实例上有多个厂商的数据库,每个数据库由各自的进行厂进行商维护,

为了限定不同厂商的维护人员只能访问自己的数据库,现需要给各个厂商限定权限,让他们登录SQL Server只能看到授权的数据库而无法看到其他数据库。

 

解决方案

1.先给不同的厂商创建不同的登录名(如下以一个厂商为例)

image

 

 

2.将登录名加入到public服务器角色中,然后点击确定

image

 

3.将public服务器角色的属性——>安全对象中取消查看所有数据库的权限

或者执行如下SQL:

REVOKE VIEW ANY DATABASE TO [public]

 

4.将待授权的数据库的dbowner指派给该用户

Use [xjcs]
go
EXEC dbo.sp_changedbowner N'provider1'

 

 

此时用'provider1'登录SQL Server,便只能看到指定的用户数据库了(系统数据库除外)

image

 

 

 

 

说明:

我之前希望在第2个步骤中设置登录名的用户映射来实现这个需求,如下图,但没有效果,登录到SQL Server后还是无法看到用户数据库,

所以才采用上述方法:

image

image


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值