Uruchamiam następujące zapytanie w SQL Server 2014:

SELECT
    dp.class_desc, dp.permission_name, dp.state_desc,
    ObjectName = OBJECT_NAME(major_id), 
    GranteeName = grantee.name, GrantorName = grantor.name
FROM 
    sys.database_permissions dp
JOIN
    sys.database_principals grantee ON dp.grantee_principal_id = grantee.principal_id
JOIN 
    sys.database_principals grantor ON dp.grantor_principal_id = grantor.principal_id

Otrzymuję wszystkie wiersze, których się spodziewam. Stworzyłem testowych użytkowników i role w bazie danych i je widzę.

Kiedy uruchamiam go w PowerShell:

(invoke-sqlcmd 'select dp.class_desc, dp.permission_name, dp.state_desc,
ObjectName = OBJECT_NAME(major_id), GranteeName = grantee.name, GrantorName = grantor.name
FROM sys.database_permissions dp
JOIN sys.database_principals grantee on dp.grantee_principal_id = grantee.principal_id
JOIN sys.database_principals grantor on dp.grantor_principal_id = grantor.principal_id -ServerInstance Blah\blah)

Nie widzę moich użytkowników / ról testowej bazy danych w danych wyjściowych. Używam uwierzytelniania systemu Windows. Ten sam użytkownik uruchamia polecenie PowerShell i łączy się przez SSMS. Ponadto w danych wyjściowych programu PowerShell widzę wyłączone konta. Nie widzę, kiedy uruchamiam zapytanie w SSMS.

Jakieś sugestie, w jaki sposób mogę uzyskać takie same wyniki z programu PowerShell, jak w programie SSMS?

0
boblewis 14 styczeń 2020, 02:53

1 odpowiedź

Najlepsza odpowiedź

Nie sądzę, abyś uruchamiał oba polecenia w tej samej bazie danych. tj. w SSMS uruchamiasz go z żądaną bazą danych, ale w poleceniu Invoke-SqlCmd nie określasz, z którą bazą danych korzystasz. Domyślnie będzie to baza danych master, dlatego też widzisz „wyłączone” konta. Spróbuj określić parametr -Database.

(invoke-sqlcmd 'select dp.class_desc, dp.permission_name, dp.state_desc,
ObjectName = OBJECT_NAME(major_id), GranteeName = grantee.name, GrantorName = grantor.name
FROM sys.database_permissions dp
JOIN sys.database_principals grantee on dp.grantee_principal_id = grantee.principal_id
JOIN sys.database_principals grantor on dp.grantor_principal_id = grantor.principal_id' -ServerInstance 'Blah\blah' -Database 'MyDatabase')
1
HAL9256 14 styczeń 2020, 01:22