创建只能查看一个数据库的用户,只能从中选择?

时间:2012-04-18 22:17:51

标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2

我们在SQL服务器上有几个数据库。 我们想创建一个新用户,可以看到数据库'c'但无法看到其余的数据库。

此用户应该只能从此数据库中进行选择,而不能选择任何其他内容 我一直在谷歌搜索和搜索一段时间,我发现最接近的是拒绝查看任何数据库,然后使它们成为数据库所有者。

但我不认为这会限制他们选择,除非我有办法 拒绝除数据库所有者上的select之外的所有内容?

提前感谢您的帮助!

编辑:顺便说一下,SQL Server 2008 R2。

编辑2:对不起,我的原帖不清楚。我希望这样做,当他们登录时,他们甚至不会看到其他数据库的名称,而不仅仅是他们无法访问它们。

感谢。

4 个答案:

答案 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)

也许这会奏效。

将用户添加到服务器并映射到正确的数据库。 从服务器中删除用户。

服务器会通知您 删除服务器用户不会删除与此登录关联的数据库用户。

单击“确定”,您将拥有只能访问一个数据库的用户。