8

我们在 SQL 服务器上有几个数据库。我们想创建 1 个可以看到数据库“c”但看不到其余数据库的新用户。

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

但我认为这不会限制他们选择,除非有办法我可以拒绝除了数据库所有者的选择之外的一切?

提前感谢您的帮助!

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

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

谢谢。

4

4 回答 4

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'
于 2012-04-18T22:27:17.170 回答
2

在权限方面,deny 是默认行为,因此,如果您创建用户并将其添加到必要数据库上的 db_datareader 角色中,那将是它拥有的唯一权限。它将无法访问其他数据库

编辑:

use [master]
GO
DENY VIEW ANY DATABASE TO [login]
GO
use [master]
GO
DENY VIEW SERVER STATE TO [login]
GO

这将删除登录名查看数据库的能力。然后去你想让他看到的那个,让他成为那个数据库的所有者

于 2012-04-18T22:33:49.960 回答
2

步骤 1:创建登录

步骤2:从登录中删除所有数据库查看权限

deny view any database to LogInName

Step-3:授予数据库登录权限

alter authorization on database:: DataBaseName to LogInName

注意:不需要用单引号指定用户名或数据库名称

于 2014-06-24T13:37:04.853 回答
-1

也许这会奏效。

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

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

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

于 2013-06-18T22:56:12.953 回答