Gasire useri db_owner

Configurare noua (How To)

Situatie

M-am lovit des de situatia in care audit-ul mi-a cerut un raport cu userii ce au drept de db_owner pe una sau mai multe baze din serverul de SQL.
Pentru aceasta am facut procedura care  poate sa fie pusa pe orice baza  , si care, la rulare,
verifica fiecare baza de pe server si , pt fiecare baza in parte, intoarce userii care au drept de db_owner pe acea baza (acestia sunt userii care pot face ORICE pe acea baza si la care persoanele care fac audit cer explicatii pt aceste drepturi)
Coloanele pe care le intoarce procedura sunt:
– numele serverului (am pus si numele serverului pt ca, in general, persoana care auditeaza vrea raportul in format excel si aceasta coloana este de folos atunci cand sunt mai multe servere)
– numele bazei pe care userul are drept de db_owner
– numele userului care are drept de db_owner
– tipul userului (de sql sau de windows)

Solutie

create procedure BD_FindDbOwner_prc

as

DECLARE @baza VARCHAR(50)
DECLARE @sql NVARCHAR(MAX)

CREATE TABLE #UseriDbo
(
ServerName SYSNAME,
DbName SYSNAME,
UserName SYSNAME,
TypeOfLogIn VARCHAR(50),
PermissionLevel VARCHAR(50)
)

DECLARE xcursor CURSOR
LOCAL FAST_FORWARD
FOR
SELECT name
FROM master.sys.databases
where state_desc=’online’
OPEN xcursor
FETCH NEXT FROM xcursor INTO @baza
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql = ‘use ‘+@baza +’;’+ ‘SELECT
ServerName=@@servername, dbname=db_name(db_id()),p.name as UserName, p.type_desc as TypeOfLogin,
pp.name as PermissionLevel
FROM sys.database_role_members roles
JOIN sys.database_principals p ON roles.member_principal_id = p.principal_id
JOIN sys.database_principals pp ON roles.role_principal_id = pp.principal_id
where pp.name=”db_owner” and p.name<>”dbo”’

INSERT INTO #UseriDbo
EXEC sp_executesql @sql

FETCH NEXT FROM xcursor INTO @baza
END
CLOSE xcursor
DEALLOCATE xcursor

SELECT * FROM #UseriDbo

DROP TABLE #UseriDbo

Tip solutie

Permanent
Etichetare:

Voteaza

(24 din 55 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?