Подтвердить что ты не робот

Определить, какие созданные пользователем объекты в SQL Server

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

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

4b9b3361

Ответ 1

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

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

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

Но.

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

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

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

Ответ 2

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

enter image description here

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

Ответ 3

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

select 
    so.name, su.name, so.crdate 
from 
    sysobjects so 
join 
    sysusers su on so.uid = su.uid  
order by 
    so.crdate

Ответ 4

Если вам нужен небольшой и конкретный механизм, вы можете найти DLL Triggers.

Ответ 5

Вы пробовали этот запрос:

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName,
last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( '<db name>')
AND OBJECT_ID=OBJECT_ID('<table name>')