我们在SQL服务器上有几个数据库。 我们想创建一个新用户,可以看到数据库'c'但无法看到其余的数据库。
此用户应该只能从此数据库中进行选择,而不能选择任何其他内容 我一直在谷歌搜索和搜索一段时间,我发现最接近的是拒绝查看任何数据库,然后使它们成为数据库所有者。
但我不认为这会限制他们选择,除非我有办法 拒绝除数据库所有者上的select之外的所有内容?
提前感谢您的帮助!
编辑:顺便说一下,SQL Server 2008 R2。
编辑2:对不起,我的原帖不清楚。我希望这样做,当他们登录时,他们甚至不会看到其他数据库的名称,而不仅仅是他们无法访问它们。感谢。
答案 0 :(得分:6)
1)在服务器上创建用户
2)将用户添加到给定数据库
3)授予对数据库的只读访问权限
USE [master]
CREATE LOGIN [SomeUserName] WITH PASSWORD=N'someStr0ngP@ssword', DEFAULT_DATABASE=[c], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
GO
USE [c]
CREATE USER [SomeUserName] FOR LOGIN [SomeUserName] WITH DEFAULT_SCHEMA=[dbo]
GO
EXEC sp_addrolemember N'db_datareader', N'SomeUserName'
答案 1 :(得分:2)
deny是权限的默认行为,因此如果您创建用户并将其添加到必要数据库上的db_datareader角色,那么它将是唯一的权限。它无法访问其他数据库
编辑:
use [master]
GO
DENY VIEW ANY DATABASE TO [login]
GO
use [master]
GO
DENY VIEW SERVER STATE TO [login]
GO
将删除登录查看数据库的能力。 然后去你想要他看的那个并让他成为那个DB的拥有者
答案 2 :(得分:1)
步骤1:创建登录
步骤2:从登录
中删除所有数据库视图权限deny view any database to LogInName
步骤3:提供数据库的登录授权
alter authorization on database:: DataBaseName to LogInName
注意:无需使用单引号
指定用户名或数据库名称答案 3 :(得分:-1)
也许这会奏效。
将用户添加到服务器并映射到正确的数据库。 从服务器中删除用户。
服务器会通知您 删除服务器用户不会删除与此登录关联的数据库用户。
单击“确定”,您将拥有只能访问一个数据库的用户。