CREATE TABLE #LoginInfo (
Код: Выделить всё
AccountName NVARCHAR(512),
Type NVARCHAR(50),
Privilege NVARCHAR(50),
MappedLoginName NVARCHAR(512),
PermissionPath NVARCHAR(512)
-- Объявите переменные для хранения динамического SQL и имени пользователя (из более крупного запроса)
DECLARE @sql NVARCHAR(MAX);
DECLARE @username NVARCHAR(512);
-- Получить имя пользователя (владельца базы данных) из таблицы sys.databases
-- Это тот же запрос, что и раньше, но просто извлекается имя владельца.
SELECT @username = suser_sname(db .owner_sid)
ИЗ sys.databases db
ГДЕ db.name = 'YourDatabaseName'; -- При необходимости укажите имя базы данных или удалите предложение WHERE, если для всех БД
-- Создайте динамический SQL для выполнения xp_logininfo для полученного имени пользователя
SET @sql = N'EXEC xp_logininfo @acctname = ''' + @username + ''', @option = ''all''';
-- Выполните динамический SQL и вставьте результат во временную таблицу
INSERT INTO #LoginInfo
EXEC sp_executesql @sql;
-- Теперь измените более крупный запрос, чтобы проверить, существуют ли права администратора во временной таблице.
SELECT @@SERVICENAME AS InstanceName,
Код: Выделить всё
db.name AS DatabaseName,
CASE
WHEN db.is_trustworthy_on = 1 THEN 'Yes'
WHEN db.is_trustworthy_on = 0 THEN 'No'
WHEN db.is_trustworthy_on IS NULL THEN 'NULL'
ELSE CAST(db.is_trustworthy_on AS VARCHAR)
END AS 'is_trustworthy_on',
suser_sname(db.owner_sid) AS db_owner,
-- Check if the admin privilege exists in the temp table
CASE
WHEN EXISTS (
SELECT 1 FROM #LoginInfo
WHERE Privilege = 'admin'
) THEN 'Yes'
ELSE 'No'
END AS 'is_sysadmin',
CASE
WHEN s1.is_disabled = 1 THEN 'Yes'
WHEN s1.is_disabled = 0 THEN 'No'
WHEN s1.is_disabled IS NULL THEN 'NULL'
ELSE CAST(s1.is_disabled AS VARCHAR)
END AS 'IsLoginDisabled',
CASE
WHEN s1.name IS NULL THEN 'Yes'
ELSE 'No'
END AS IsOrphaned,
CASE
WHEN dbm.mirroring_role = 1 THEN 'Mirroring - Primary'
WHEN dbm.mirroring_role = 2 THEN 'Mirroring - Secondary'
WHEN sys.fn_hadr_is_primary_replica(db.name) = 1 THEN 'AG - Primary'
WHEN sys.fn_hadr_is_primary_replica(db.name) = 0 THEN 'AG - Secondary'
ELSE 'None'
END AS 'DR_Role'
LEFT JOIN sys.sql_logins sl ON db.owner_sid = sl.sid
LEFT JOIN sys.database_mirroring dbm ON db.database_id = dbm.database_id
LEFT JOIN sys.server_principals s1 ON db.owner_sid = s1.sid;
-- Удалить временную таблицу после использования
DROP TABLE #LoginInfo;
Подробнее здесь: https://stackoverflow.com/questions/790 ... to-use-php
Мобильная версия