SQL/SSMS 只读用户,只能查看单个数据库

SQL/SSMS 只读用户,只能查看单个数据库

我目前正在使用 SQL Server 2005,它为个人客户提供了许多数据库。

我需要为每个客户创建一个只读登录,但是我不能允许他们查看 SSMS 中的其他数据库,因为它们包含其他客户的公司名称。

我运行了下面的命令,它给了我所需的一切,但是这给了他们 db_owner 而不是只读。删除 db_owner 后,他们就无法再在 SSMS 中看到数据库了。

--Step 1: (create a new user)
create LOGIN hello WITH PASSWORD='foo', CHECK_POLICY = OFF;


-- Step 2:(deny view to any database)
USE master;
GO
DENY VIEW ANY DATABASE TO hello; 


 -- step 3 (then authorized the user for that specific database , you have to use the  master by doing use master as below)
USE master;
GO
ALTER AUTHORIZATION ON DATABASE::yourDB TO hello;
GO

这可能吗?如果 2005 年无法实现,我可以根据需要升级 SQL。

答案1

为登录创建一个用户并为其分配只读角色是否可以?

<!-- language: lang-sql -->
CREATE USER hello FOR LOGIN hello
GO
EXEC sp_addrolemember 'db_datareader', 'hello'

在此之后,他们不应成为 db_owner 角色的成员,除非默认设置为将任何新用户添加到 db_owner 角色。这应该仅限于针对用户数据库的 SELECT。如果您想将视图限制为特定表,则必须创建自定义角色来限制该访问权限。

相关内容