16

データベースに対して次のクエリを実行しています。

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います。

これらのクエリが期待する結果を返さない理由を誰か教えてもらえますか? また、重要な情報が不足している場合はお知らせください。ありがとう!

4

3 に答える 3

11

問題は、ログインdomain\usernameがデータベースのdboであるため、そのデータベース内の対応するユーザーの名前がであり、ではないことも意味することですdbo domain\username

于 2012-10-23T19:55:46.873 に答える
1

走るALTER AUTHORIZATION ON DATABASE::[<yourdb>] TO [sa]

于 2012-10-23T19:50:18.320 に答える
0

私が書いたストアドプロシージャでも同じエラーが発生しました。

クエリでデータベース名を指定した方法が原因でエラーが発生したことがわかりました

SELECT emp_no 
FROM   db_name.employee 
WHERE  emp_no = 1234

db_name2スクリプトからデータベース名を削除したら、手順を実行していました

SELECT emp_no 
FROM   employee 
WHERE  emp_no = 1234

それはうまくいきました。

use db_nameログのアクセス権が制限されているため、他のデータベースやコマンド を使用できないと思います。

于 2014-08-20T10:31:29.840 に答える