我正在尝试从用户数据库访问Master DB上的sys.SQL_Logins
,以便可以将sys.sql_logins
与sys.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中联接这两个表?
答案 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