Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выбрать имена всех таблиц, созданных назначенным пользователем базы данных  [new]
iamsql
Member

Откуда:
Сообщений: 3
Добрый день! Итак, я есть пользователь-админ Lnk, хочу выбрать имена таблиц, созданных мной. Я пишу запрос:

select * from sys.database_principals 

и в нем среди значений столбца name нет меня, то есть нет Lnk. Далее, сделав запрос

select * from sys.database_principals

я вижу, что для всех таблиц, которые я создал в некоторой базе, в principal_id стоит null (короче говоря, 0). Из предыдущего запроса узнаю, что principal_id = 0 соответствует name = 'public'. Но почему public, ведь это вообще роль, а не пользователь? Пользователь - Lnk, в данный момент я сижу под ним, базу данных я создавал тоже будучи им, так почему, когда я пишу

select * from sys.objects
where type = 'U'
and
principal_id = (select principal_id from sys.database_principals where name = user_name())

мне вообще ничего не выводит? Получается, что этот пользователь вообще ничего не создал? но ведь это не так. Где ошибка и как ее исправить?

Сообщение было отредактировано: 10 ноя 19, 21:32
10 ноя 19, 21:28    [22013115]     Ответить | Цитировать Сообщить модератору
 Re: выбрать имена всех таблиц, созданных назначенным пользователем базы данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
iamsql
Итак, я есть пользователь-админ Lnk...и в нем среди значений столбца name нет меня, то есть нет Lnk
Члены серверной роли sysadmin отображаются в БД на dbo.
10 ноя 19, 22:00    [22013128]     Ответить | Цитировать Сообщить модератору
 Re: выбрать имена всех таблиц, созданных назначенным пользователем базы данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30711
iamsql
в principal_id стоит null (короче говоря, 0)
0 не равно null, во первых.

Во вторых, если в principal_id стоит null, значит, объект создал владелец его схемы. Что написано в документации по sys.objects

Владельца схемы можно посмотреть в sys.schemas

Если вы админ, то ваш user_name() = "dbo"

Запрос, соответственно, должен быть более сложный, нужно учитывать в варианта, с principal_id is null, и principal_id is not null
10 ноя 19, 22:44    [22013143]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить