データベースに作成された証明書があると仮定します
create certificate certName
with subject = 'subj';
GO
そして、この証明書にマッピングされたユーザー
create user userName
from certificate certName;
GO
このユーザーに直接なりすまそうとしています
execute as user = 'userName';
GO
または、モジュールのexecute as
句でユーザーを指定する
create procedure procName
with execute as 'userName'
as
set nocount on;
GO
エラーを返します
メッセージ15517、レベル16、状態1 ...
プリンシパル「userName」が存在しないか、このタイプのプリンシパルが偽装できないか、または権限がないため、データベースプリンシパルとして実行できません。
ただし、ドキュメントで言及されているこの制限を見つけることができませんでした( ここ および ここ )。
user_nameは現在のデータベースに存在している必要があり、シングルトンアカウントである必要があります。 user_nameは、グループ、ロール、証明書、キー、またはビルトインアカウント(NT AUTHORITY\LocalService、NT AUTHORITY\NetworkService、NT AUTHORITY\LocalSystemなど)にすることはできません。
証明書にマップされたユーザー(またはログイン)を偽装することは可能ですか?
証明書と非対称キーから作成されたログインとユーザーは偽装できません。これらは、同じ証明書または非対称キーで署名されたモジュールに追加される一連の権限のプロキシにすぎません。
また、次の理由により、これらのログインとユーザーを偽装することはあまり意味がありません。
CREATE
ステートメントのオプションのEXECUTE AS
句を含む)を使用して作成されます。署名。テキストが変更されると、署名が一致しなくなります。結局、非対称鍵と証明書から作成されたログインやユーザーを使用することで、偽装の必要性がなくなります。
それでも、より公式の指標を探している場合、 CREATE USER のMSDNページには次のように記載されています。
認証できないユーザーこれらのユーザーはSQL ServerまたはSQLデータベースにログインできません。
- ログインしていないユーザー。ログインできませんが、権限を付与できます。
CREATE USER CustomApp WITHOUT LOGIN;
- 証明書に基づくユーザー。ログインできませんが、権限を付与でき、モジュールに署名できます。
CREATE USER TestProcess FOR CERTIFICATE CarnationProduction50;
- 非対称キーに基づくユーザー。ログインできませんが、権限を付与でき、モジュールに署名できます。
CREATE User TestProcess FROM ASYMMETRIC KEY PacificSales09;
ただし、ログイン/認証できないことは、「ログインできない」ユーザーがそのリストに含まれ、EXECUTE AS USER='{user_without_login}';
を実行できることを前提として、「偽装できない」という意味ではありません。
CREATE LOGIN のMSDNページには、次のように記載されています。
証明書または非対称キーから作成されたログインは、コード署名にのみ使用されます。 SQL Serverへの接続には使用できません。
2番目の文はCREATE USER
のドキュメントの内容を繰り返していますが、最初の文は少し具体的です。これらはコード署名専用です。
最後に、ドキュメント内で EXECUTE AS と EXECUTE AS句 の両方について混乱しているように表現されていても、制限のステートメントは正しいです。彼らは述べています(太字の強調が追加されています):
nameはシングルトンアカウントである必要があり、グループ、ロール、certificate、key、またはNT AUTHORITY\LocalService、NT AUTHORITY\NetworkService、NT AUTHORITY\LocalSystemなどの組み込みアカウント。
その引用はEXECUTE AS
のドキュメントから引用され、EXECUTE AS Clause
のドキュメント(ほぼ同じ表現)が質問で引用されています。これらのページではどちらも「証明書」と「キー」という用語を使用していますが、実際にはそれぞれ「証明書ベースのログイン/ユーザー」と「非対称キーベースのログイン/ユーザー」を意味しています。指定されたプリンシパルタイプのリストはすべてsys.server_principals
(ログイン用)およびsys.database_principals
(ユーザー用)にあり、証明書も非対称キーもどちらにもリストされないという事実に基づいて、これを想定しています。それらのシステムカタログビューの。