it-swarm.com.de

Kann ich alle Datenbankobjekte abrufen, die einem bestimmten Benutzer gehören?

Wir haben einen Benutzer, der geht, und ich muss jedes Datenbankobjekt kennen, das er besitzt. Gibt es eine Abfrage, die diese Informationen liefert?

16
JHFB

Dies sollte Ihnen das bringen, wonach Sie suchen:

;with objects_cte as
(
    select
        o.name,
        o.type_desc,
        case
            when o.principal_id is null then s.principal_id
            else o.principal_id
        end as principal_id
    from sys.objects o
    inner join sys.schemas s
    on o.schema_id = s.schema_id
    where o.is_ms_shipped = 0
    and o.type in ('U', 'FN', 'FS', 'FT', 'IF', 'P', 'PC', 'TA', 'TF', 'TR', 'V')
)
select
    cte.name,
    cte.type_desc,
    dp.name
from objects_cte cte
inner join sys.database_principals dp
on cte.principal_id = dp.principal_id
where dp.name = 'YourUser';

Dadurch erhalten Sie Objekte, die Ihrem bestimmten Benutzer gehören (ersetzen Sie 'YourUser' natürlich). Die Objekttypen, die von dieser Abfrage abgerufen werden, sind:

  • FN = SQL-Skalarfunktion
  • FS = Assembly (CLR) -Skalarfunktion
  • FT = CLR-Tabellenfunktion (Assembly)
  • IF = SQL-Inline-Tabellenwertfunktion
  • P = Gespeicherte SQL-Prozedur
  • PC = Assembly (CLR) gespeicherte Prozedur
  • TA = Assembly (CLR) DML-Trigger
  • TF = SQL-Tabellenwertfunktion
  • TR = SQL DML-Trigger
  • U = Tabelle (benutzerdefiniert)
  • V = Ansicht
23
Thomas Stringer

So zeigen Sie alle Nicht-Sa-Datenbankbesitzer an:

SELECT suser_sname( owner_sid ) OwnerID , * FROM sys.databases where suser_sname( owner_sid ) <> 'sa'

Wenn Sie ein SQL-System benötigen Jobbesitzer:

select s.name,l.name  
from  msdb..sysjobs s 
left join master.sys.syslogins l on s.owner_sid = l.sid 
where l.name is not null and l.name <> 'sa'
order by l.name
3
Steve

Für Jobs können Sie keine Syslogins verwenden, da der Eigentümer möglicherweise Teil einer Gruppe ist und nicht in Anmeldungen vorhanden ist. Verwenden Sie die folgenden

select msdb.[dbo].[SQLAGENT_SUSER_SNAME](owner_sid), * 
from msdb.dbo.sysjobs
3
Juicy Meats