Определите, какие пользователь создал объекты в SQL Server - PullRequest
42 голосов
/ 10 августа 2009

Я пытаюсь просмотреть нашу БД разработки и очистить некоторые старые тестовые процедуры / таблицы. Можно ли определить, какие объекты пользователь создал в базе данных SQL Server 2005? Если да, то как мне найти эту информацию?

Изменить: Просто хотел уточнить, что рассматриваемые объекты уже существуют. Настройка аудита и триггеров, вероятно, не принесет мне много пользы. Наверное, я в основном искал способ использовать системные таблицы / представления для получения информации.

Ответы [ 4 ]

40 голосов
/ 01 августа 2013

Если объект был создан недавно, вы можете проверить отчет «История изменений схемы» в среде SQL Server Management Studio, который «предоставляет историю всех выполненных утверждений оператора DDL в базе данных, записанной трассировкой по умолчанию»:

enter image description here

Затем вы можете искать операторы создания объектов. Среди всей отображаемой информации есть логин, имя которого выполнил оператор DDL.

30 голосов
/ 10 августа 2009

Ответ "нет, вы, вероятно, не можете".

Хотя там есть вещи, которые могут сказать, кто создал данный объект, за ними много «если». Быстрый (и не обязательно полный) обзор:

sys.objects (и, следовательно, sys.tables, sys.procedures, sys.views и т. Д.) Имеет столбец Principal_id. Это значение является внешним ключом, который относится к списку пользователей базы данных, который, в свою очередь, может быть объединен со списком имен входа SQL (экземпляра). (Всю эту информацию можно найти в других системных представлениях.)

Но.

Быстрая проверка наших настроек здесь и краткий обзор BOL показывают, что это значение устанавливается (то есть не ноль), только если оно «отличается от владельца схемы». В нашей системе разработки, и у нас есть dbo + две другие схемы, все выглядит как NULL. Вероятно, это связано с тем, что все имеют права dbo в этих базах данных.

Используется проверка подлинности NT. SQL-аутентификация, вероятно, работает примерно так же. Кроме того, у всех есть и используется уникальный логин, или они разделены? Если у вас есть текучесть кадров и доменные (или SQL) логины отброшены, данные могут снова отсутствовать или быть неполными.

Вы можете просмотреть эти данные (выбрать * из sys.objects), но если Principal_id имеет значение null, вам, вероятно, не повезло.

16 голосов
/ 10 августа 2009

Если у каждого пользователя есть свой собственный логин SQL Server, вы можете попробовать это

select 
    so.name, su.name, so.crdate 
from 
    sysobjects so 
join 
    sysusers su on so.uid = su.uid  
order by 
    so.crdate
1 голос
/ 10 августа 2009

Если вам нужен небольшой и специфический механизм, вы можете найти Триггеры DLL info.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...