Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / выбрать имена всех таблиц, созданных назначенным пользователем базы данных / 3 сообщений из 3, страница 1 из 1
10.11.2019, 21:28
    #39887231
iamsql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбрать имена всех таблиц, созданных назначенным пользователем базы данных
Добрый день! Итак, я есть пользователь-админ Lnk, хочу выбрать имена таблиц, созданных мной. Я пишу запрос:

Код: sql
1.
select * from sys.database_principals 


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

Код: sql
1.
select * from sys.database_principals


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

Код: sql
1.
2.
3.
4.
select * from sys.objects
where type = 'U'
and
principal_id = (select principal_id from sys.database_principals where name = user_name())


мне вообще ничего не выводит? Получается, что этот пользователь вообще ничего не создал? но ведь это не так. Где ошибка и как ее исправить?
...
Рейтинг: 0 / 0
10.11.2019, 22:00
    #39887235
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбрать имена всех таблиц, созданных назначенным пользователем базы данных
iamsql
Итак, я есть пользователь-админ Lnk...и в нем среди значений столбца name нет меня, то есть нет Lnk
Члены серверной роли sysadmin отображаются в БД на dbo.
...
Рейтинг: 0 / 0
10.11.2019, 22:44
    #39887246
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбрать имена всех таблиц, созданных назначенным пользователем базы данных
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
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / выбрать имена всех таблиц, созданных назначенным пользователем базы данных / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]