gpt4 book ai didi

sql-server - 创建一个 SQL Server 用户,使其具有读取一个 View 的权限,而没有其他权限 - 但他可以看到系统 View 和过程?

转载 作者:行者123 更新时间:2023-12-02 20:53:33 25 4
gpt4 key购买 nike

我的公司聘请了一名承包商为我们做一个小项目,为此他需要从我们主数据库 (SQL Server 2005) 的一个 View 中选择数据。

我想为他创建一个锁定的 SQL Server 登录名,仅具有从“他的” View 中 SELECT 的权限...除此之外没有其他权限。

所以我在服务器上创建了一个新用户,然后我只给了他这个 View 的权限:

grant select on SpecialView to SpecialUser;

基本上,这是可行的 - 他看不到我们的任何表和存储过程,也看不到除“他的” View 之外的任何 View 。

但是:

  • 他可以访问所有系统 View
  • 他可以访问所有系统存储过程。

显然他的权限被自动锁定(sys.objects 仅显示他拥有权限的对象,sp_who 仅显示他自己的进程等)。

所以,我的问题是:

是否可以创建一个不访问系统 View 和存储过程的用户?
(如果是,我做错了什么?)

或者是否有某种原因导致即使锁定的用户也需要访问系统 View 和存储过程?

编辑:
kevchadders,用户无法访问 master、model 或 msdb - 只能访问具有他应该看到的 View 的数据库。

但是,要澄清一件事:用户可以看到的系统 View /过程在“他的” View 所在的数据库中...而不是在主数据库中。因此,我无法禁用他的所有访问权限,因为他需要从同一数据库中的一个 View 中进行选择。
关键是,即使我只为他应该看到的单个 View 明确设置权限,为什么他仍然可以看到系统 View /过程?

最佳答案

使用拒绝查看定义。您无法取消用户查看 View 和存储过程是否存在的能力,但可以取消查看其中(大部分)内容的能力。

deny view definition to smallperms_role 
go
sp_addrolemember 'smallperms_role ', 'smallperms_user'
go
sp_addrolemember 'db_datareader', 'smallperms_user'
go

例如:
EXEC sys.sp_databases 不返回任何内容,但执行。
SELECT * FROM INFORMATION_SCHEMA.TABLES 不返回任何内容,但不返回错误。

关于sql-server - 创建一个 SQL Server 用户,使其具有读取一个 View 的权限,而没有其他权限 - 但他可以看到系统 View 和过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com