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

Уточнение относительно того, почему EXECUTE AS USER/LOGIN не возвращает ожидаемые результаты?

Я запускаю следующий запрос к базе данных:

execute as user = 'domain\username'
select * from fn_my_permissions(null, 'DATABASE')
order by subentity_name, permission_name
revert;

Но возникает следующая ошибка:

Cannot execute as the database principal because the principal "dev\spadmin" does not exist, this type of principal cannot be impersonated, or you do not have permission.

Пользователь - это dbo базы данных, и когда я открываю свойства в студии управления, я вижу, что он связан с этим логином. Выполнение EXECUTE AS LOGIN = 'domain\username' возвращает результаты, с другой стороны. И если я явно запускаю EXECUTE AS USER = 'dbo', я получаю результаты. У меня также есть другая база данных, где этот же сценарий возвращает результаты как с EXECUTE AS USER, так и EXECUTE AS LOGIN.

В другом сценарии с другим пользователем я побежал EXECUTE AS LOGIN = 'domain\username', и я не получаю результаты, но я получаю результаты с помощью EXECUTE AS USER = 'domain\username'.

Оба пользователя в этих сценариях связаны с входами, которые являются членами db_owner для базы данных.

Может кто-нибудь сказать мне, почему эти запросы не возвращают ожидаемые результаты? И дайте мне знать, не хватает ли какой-либо важной информации. Спасибо!

4b9b3361

Ответ 1

Проблема заключается в том, что поскольку Login domain\username является dbo базы данных, это также означает, что имя соответствующего пользователя в этой базе данных dbo и не domain\username.

Ответ 2

запустить ALTER AUTHORIZATION ON DATABASE::[<yourdb>] TO [sa]

Ответ 3

У меня была такая же ошибка для хранимой процедуры, которую я написал.

Я обнаружил, что ошибка была вызвана тем, как я указал имя базы данных в запросе

SELECT emp_no 
FROM   db_name.employee 
WHERE  emp_no = 1234

Я выполнял процедуру на db_name2 после удаления имени базы данных из моего script

SELECT emp_no 
FROM   employee 
WHERE  emp_no = 1234

он работал нормально.

Я не думаю, что уменьшенные права доступа журнала позволяют использовать другие базы данных или команду use db_name.