40

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

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

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

我怎样才能做到这一点?

4

4 回答 4

68

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

--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

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

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

于 2013-03-14T02:59:16.687 回答
35
  1. 使用 Management Studio 连接到您的 SQL Server 实例
  2. 转到安全->登录->(右键单击)新登录
  3. 填写用户详细信息
  4. 在用户映射下,选择您希望用户能够访问和配置的数据库

更新:

您还需要 gotoSecurity -> Server Roles和 forpublic检查权限TSQL Default TCP/TSQL Default VIA/TSQL Local Machine/TSQL Named Pipes并删除connect权限

于 2010-11-03T09:42:08.280 回答
2

对于其他想知道如何做到这一点的人,我为 SQL Server 2008 R2 及更高版本提供了以下解决方案:

USE master
go
DENY VIEW ANY DATABASE TO [user]
go

这将完全满足上述要求。

于 2012-10-17T12:44:36.027 回答
0

这是为了补足被选为正确答案的内容。它缺少一个步骤,如果没有完成,用户仍然可以访问数据库的其余部分。首先,按照@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.

就是这样。

于 2019-08-15T21:36:54.047 回答