如何为 Azure 中的第二个数据库创建第二个登录?如何拒绝用户访问其中一个数据库?

Yul*_*a V 4 sql-server azure-sql-database

我有一个 Azure 数据库,并且在同一台服务器上创建了另一个数据库。之后,我创建了一个用户和一个相应的登录名(请参阅下面的脚本),目的是仅将其用于第二个数据库。运行我搜索过的脚本后(如下),第二个用户可以访问两个数据库。如何拒绝第二个用户访问第一个数据库?有DENYREVOKE,否认特定权利,但我不清楚应该使用哪个。

额外问题:是否可以创建一个只能访问第二个数据库的用户?

IF NOT EXISTS (SELECT 1 FROM master.sys.databases WHERE ('[' + name + ']' = '[Elmah5]'))
    CREATE DATABASE Elmah5;
GO

IF NOT EXISTS (SELECT 1 FROM sys.sql_logins  WHERE name = 'ElmahAdmin')
    CREATE LOGIN ElmahAdmin WITH PASSWORD = ''
GO

IF NOT EXISTS (SELECT 1 FROM sys.database_principals  WHERE name = 'ElmahAdmin')
    CREATE USER ElmahAdmin FOR LOGIN ElmahAdmin WITH DEFAULT_SCHEMA=[dbo]
GO
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


应该怎么做

  1. 使用您的主帐户连接。
  2. 将您当前的数据库切换到 MASTER(圈出,只需输入 MASTER 并按 ENTER)并运行

    IF NOT EXISTS (SELECT 1 FROM master.sys.databases WHERE ('[' + name + ']' = '[SecondDB]'))
        CREATE DATABASE SecondDB;
    GO  
    IF NOT EXISTS (SELECT 1 FROM sys.sql_logins  WHERE name = 'SecondDBAdmin')
        CREATE LOGIN SecondDBAdmin WITH PASSWORD = ''
    GO
    
    Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  1. 仍然在您第一次登录的情况下,切换到 SecondDB 并运行

    CREATE USER SecondDBAdmin FOR LOGIN SecondDBAdmin WITH DEFAULT_SCHEMA=[dbo]
    GO
    EXEC sp_addrolemember @rolename = 'db_owner', @membername = 'SecondDBAdmin'
    GO
    
    Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Sti*_*ing 5

如果您根本不希望用户访问数据库,请确保您的用户没有允许他们访问每个数据库的系统管理员权限。除此之外,在您不希望第二个用户访问的数据库上,运行以下命令:

USE [1stDatabase]
DROP USER [2ndUser]
GO
Run Code Online (Sandbox Code Playgroud)

为第二个数据库创建独占用户:

USE MASTER
CREATE LOGIN [login_name here] WITH PASSWORD = '[password here]'
GO

USE [2ndDatabase]
CREATE USER [login name here] FOR LOGIN [login name here]
GO
Run Code Online (Sandbox Code Playgroud)