1

我有一种情况,我想限制每个用户登录的数据库视图。

例如:我的 SQL Server 实例中有 3 个数据库,分别称为 MyDB、UserDB、RestrictedDB。然后我创建了 2 个登录名;用户 1 和用户 2。然后我拒绝查看 [User1] 的任何数据库,然后拒绝查看 [User2] 的任何数据库。然后我通过执行 sp_changedbowner 'User1' 使 User1 成为 UserDB 的所有者

当我以 User1 身份登录时,我只能看到正是我想要的 UserDB。但当然,当我以 User2 身份登录时,没有他可以查看的数据库。

我也通过执行 sp_addrolemember 'db_owner','User2' 使 User2 成为 db_owner 并再次登录,但我仍然看不到 UserDB。我没有尝试在 User2 上执行 sp_changedbowner,因为我认为结果是 User2 将能够看到 UserDB 而不是 User1。

我需要的是 User1 和 User2 都能够看到 UserDB。我该怎么做呢?

提前致谢!

4

4 回答 4

3

您可以设置一个安全角色,授予表、视图及其所有这些访问权限。将所需的用户与您创建的角色相关联,您将获得所需的结果。

下面应该创建一个角色、登录名、用户并为相关视图提供仅选择权限。可以将相同的方法应用于您希望的任何权限。

CREATE ROLE [db_views_role] AUTHORIZATION [dbo]
GO
GRANT SELECT ON [dbo].[vMyView] TO [db_views_role]
GO
CREATE LOGIN [my_login] WITH PASSWORD=N'PASSWORD', DEFAULT_DATABASE=[MyDatabase], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
CREATE USER [my_login] FOR LOGIN [my_login]
GO
EXEC sp_addrolemember N'db_views_role', N'my_login'
GO
于 2010-02-05T16:16:10.327 回答
1

登录需要通过创建映射到登录的数据库用户来与数据库相关联。

于 2010-02-05T16:06:43.153 回答
0

在 SQL Server 中,有Server LoginsDatabase users。尝试通过以下方式将服务器登录名关联到特定数据库:

数据库 > 安全 > 用户 > 新用户...

于 2010-02-05T16:14:54.633 回答
0

在 Oracle 中,这是通过“GRANT”命令完成的。我不知道 SQL Server 是否有 GRANT

GRANT 用于:

GRANT [permissions] ON TABLE to [user]

所以

GRANT select, insert, update, delete ON TABLE to User2
于 2010-02-05T16:05:16.827 回答