在SQL AZURE中从用户数据库访问主数据库表

时间:2019-09-15 06:38:43

标签: sql sql-server azure tsql azure-sql-database

我正在尝试从用户数据库访问Master DB上的sys.SQL_Logins,以便可以将sys.sql_loginssys.sysusers一起加入。

UserDatabase

SELECT      DP.NAME, DP.sid, SU.sid
FROM        sys.sql_logins  DP
INNER JOIN  SYS.sysusers SU
ON      DP.name=SU.name

在Azure中,我无法执行此操作,因为我无法从UserDatbase调用主数据库。我的目标是将sys.sql_logins的SID与用户数据库中的sys.sqlusers进行比较。

有什么办法可以在Azure中联接这两个表?

1 个答案:

答案 0 :(得分:0)

您只能对单个数据库执行查询。但是,您可以设置一个外部表以指向master数据库视图。这段代码应该可以帮助您:

CREATE MASTER KEY;  -- if your DB doesn't already have one
GO

CREATE DATABASE SCOPED CREDENTIAL AccessToMaster
WITH IDENTITY = 'yourmasterlogin', SECRET = 'yourpassword'; --TODO set a login name and password that can access the master database
GO

CREATE EXTERNAL DATA SOURCE MasterDatabase
WITH
(
    TYPE = RDBMS,
    LOCATION = N'yourserver.database.windows.net',  --TODO replace your server name
    DATABASE_NAME = N'master',
    CREDENTIAL = AccessToMaster
);
GO

CREATE SCHEMA MasterDB AUTHORIZATION dbo;
GO

CREATE EXTERNAL TABLE MasterDB.sql_logins
(
    [name] sysname, 
    principal_id int, 
    [sid] varbinary(85), 
    [is_disabled] bit 
)
WITH
(
  DATA_SOURCE = MasterDatabase,
  SCHEMA_NAME = 'sys',
  OBJECT_NAME = 'sql_logins'
);
GO

SELECT * FROM MasterDB.sql_logins;
GO