Sql server 2008 仅将SQL Server登录访问限制为一个数据库

Sql server 2008 仅将SQL Server登录访问限制为一个数据库,sql-server-2008,login-control,Sql Server 2008,Login Control,我有一个sqlserver服务器,上面有大约50个数据库 我希望为希望访问其数据库的客户创建一个新的登录名 但我不想让他们访问其他49个数据库 我该怎么做 使用management studio连接到SQL server实例 转到安全->登录->(右键单击)新登录 填写用户详细信息 在“用户映射”下,选择希望用户能够访问和配置的数据库 更新: 您还需要转到Security->Server Roles,对于public,通过/TSQL Local Machine/TSQL Named Pipes

我有一个
sqlserver
服务器,上面有大约50个数据库

我希望为希望访问其数据库的客户创建一个新的
登录名

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

我该怎么做

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

  • 更新:


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

    ,其他人不知道该怎么做,我为SQL Server 2008 R2及更高版本提供了以下解决方案:

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

    这将完全满足上述要求

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

    --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
    
    有关更多信息,请访问以下链接:


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

    就这样。

    谢谢你的回复。我以这种方式创建了一个新用户,尝试在SSMS2008中与他们一起登录,并且我可以完全访问所有数据库…Hi Curt-这将与服务器级别和数据库级别上通过public或guest的默认访问设置有关。请尝试上面的方法,如果这不起作用,我可以提出一些其他建议(但上次我解决了这个问题),确保相关用户的属性中没有设置为“sysadmin”。我有几个用户没有映射到数据库,但仍然具有访问权限。我认为这等于“has login inside database users”这个命令将阻止对所有50个数据库的访问,请同时提供其他必需的语句……现在,如果不能首先拒绝所有数据库,您会怎么做?其中,oposite只限制对一个特定数据库的访问。