仅限SQL Server登录访问一个数据库

Cur*_*urt 31 sql-server-2008 login-control

我有一台SQL Server服务器,上面有大约50个数据库.

我希望为Login希望访问其数据库的客户创建一个新的.

但我不想让他们访问其他49个数据库.

我怎样才能做到这一点?

kta*_*kta 51

我认为这是我们非常喜欢做的事情.

--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
Run Code Online (Sandbox Code Playgroud)

如果您已经创建了一个用户并且之前已经分配给该数据库

USE [yourDB] 
CREATE USER hello FOR LOGIN hello WITH DEFAULT_SCHEMA=[dbo] 
GO
Run Code Online (Sandbox Code Playgroud)

然后通过执行以下操作将其删除并按照步骤操作

   USE yourDB;
   GO
   DROP USER newlogin;
   GO
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请点击链接:

隐藏Microsoft Sql Server 2008R2及更高版本上的登录数据库

  • 现在,如果您不能首先拒绝所有数据库,您会怎么做?相反,仅限制对一个特定数据库的访问。 (2认同)

Irf*_*rfy 25

  1. 使用management studio连接到SQL Server实例
  2. 转到安全 - >登录 - >(右键单击)新登录
  3. 填写用户详细信息
  4. 在"用户映射"下,选择希望用户能够访问和配置的数据库

更新:

您还需要转到Security -> Server Roles,并public检查权限TSQL Default TCP/TSQL Default VIA/TSQL Local Machine/TSQL Named Pipes并删除connect权限

  • 谢谢你的回复.我用这种方式创建了一个新用户,尝试在SSMS2008中使用它们登录,并且我可以完全访问所有数据库... (2认同)
  • 确保有问题的用户未在其属性中设置为"sysadmin". (2认同)