Chr*_*cht 6 sql-server security sql-server-2005 database-permissions
我的公司聘请了一家承包商为我们做一个小项目,他需要从我们的主数据库(SQL Server 2005)中的一个单一视图中选择数据.
我想SQL Server为他创建一个锁定的登录,只需SELECT从"他的"视图中获得权限......而不是别的.
所以我在服务器上创建了一个新用户,然后我就这一个视图给了他许可:
grant select on SpecialView to SpecialUser;
Run Code Online (Sandbox Code Playgroud)
基本上,这工作 - 他看不到任何我们的表和存储过程,无论任何观点,除了"他"的一个.
但:
显然,他的权限会被自动锁定(sys.objects只显示了他具有权限的对象,sp_who只显示了自己的流程等).
所以,我的问题是:
是否可以创建无法访问系统视图和存储过程的用户?
(如果是的话,我做错了什么?)
或者是否有一些理由为什么即使是锁定的用户也需要访问系统视图和存储过程?
编辑:
kevchadders,用户必须为master,model或msdb中没有访问-只与他应该看到的视图的数据库.
但是,要清楚一点:系统视图/特效,用户可以看到的是在数据库中,其中"他"的观点是 ......不是在master数据库中.所以我无法禁用他的所有访问权限,因为他需要从同一个数据库中的一个视图中进行选择.
问题是,即使我明确地只为单一视图,他应该看到,为什么他还是看到了系统的意见/特效以及设置权限?
小智 2
使用DENY VIEW DEFINITION。您无法删除用户查看视图和存储过程是否存在的能力,但可以删除查看其中(大部分)内容的能力。
deny view definition to smallperms_role
go
sp_addrolemember 'smallperms_role ', 'smallperms_user'
go
sp_addrolemember 'db_datareader', 'smallperms_user'
go
Run Code Online (Sandbox Code Playgroud)
例如:
EXEC sys.sp_databases不返回任何内容,但执行。
SELECT * FROM INFORMATION_SCHEMA.TABLES不返回任何内容,但不返回错误。
| 归档时间: |
|
| 查看次数: |
25560 次 |
| 最近记录: |