我有一SQL Server台服务器,上面有大约 50 个数据库。
Login我希望为希望访问其数据库的客户创建一个新的。
但我不想让他们访问其他49 个数据库。
我怎样才能做到这一点?
我有一SQL Server台服务器,上面有大约 50 个数据库。
Login我希望为希望访问其数据库的客户创建一个新的。
但我不想让他们访问其他49 个数据库。
我怎样才能做到这一点?
我认为这是我们非常喜欢做的事情。
--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
如果您之前已经创建了一个用户并分配给该数据库
USE [yourDB]
CREATE USER hello FOR LOGIN hello WITH DEFAULT_SCHEMA=[dbo]
GO
然后请按照以下步骤将其删除
USE yourDB;
GO
DROP USER newlogin;
GO
欲了解更多信息,请点击以下链接:
更新:
您还需要 gotoSecurity -> Server Roles和 forpublic检查权限TSQL Default TCP/TSQL Default VIA/TSQL Local Machine/TSQL Named Pipes并删除connect权限
对于其他想知道如何做到这一点的人,我为 SQL Server 2008 R2 及更高版本提供了以下解决方案:
USE master
go
DENY VIEW ANY DATABASE TO [user]
go
这将完全满足上述要求。
这是为了补足被选为正确答案的内容。它缺少一个步骤,如果没有完成,用户仍然可以访问数据库的其余部分。首先,按照@DineshDB 的建议做
1. Connect to your SQL server instance using management studio
2. Goto Security -> Logins -> (RIGHT CLICK) New Login
3. fill in user details
4. Under User Mapping, select the databases you want the user to be able to access and configure
缺少的步骤如下:
5. Under user mapping, ensure that "sysadmin" is NOT CHECKED and select "db_owner" as the role for the new user.
就是这样。