web-dev-qa-db-ja.com

SQL Server 2008で対称キーを作成、読み取り、実行する権限を付与する方法

限られた権限を持つスキーマに関連付けられたユーザーがいます。実行中、同じユーザーログインを使用して対称鍵を生成しています。ユーザーには権限が制限されているため、ここでは鍵を作成できません。

このユーザーに対して、SQL Server 2008で対称キーを作成、読み取り、実行する権限を付与するにはどうすればよいですか?

4
vijay

次のような証明書なしでキーを作成する場合:

CREATE SYMMETRIC KEY smTestKey
 WITH ALGORITHM=AES_256
    , IDENTITY_VALUE = 'Key to protect bla'
    , Key_SOURCE = N'Secret pass phrase'
  ENCRYPTION BY PASSWORD = 'secret password';

次は十分です:

GRANT ALTER ANY SYMMETRIC KEY TO dbuser

たとえば、証明書(別のdbユーザーが作成したもの)で暗号化された対称鍵を作成する場合は、次のようになります。

CREATE SYMMETRIC KEY smTestKeyCert 
 WITH ALGORITHM = AES_256
  ENCRYPTION BY CERTIFICATE testCert;

次に、証明書に対するVIEW DEFINITION権限も必要です。

GRANT VIEW DEFINITION ON CERTIFICATE::testcert TO dbuser

ただし、証明書で復号化して対称キーを開く場合、キーを開くdbuserは証明書に対するCONTROL権限が必要です。

GRANT CONTROL ON CERTIFICATE::testcert TO dbuser

[〜#〜] update [〜#〜]サマライズするには:

  • 非対称キーを作成しているユーザーには、ALTER ANY ASYMMETRIC KEY権限が必要です
  • 対称キーを作成しているユーザーには、ALTER ANY SYMMETRIC KEY権限が必要です
  • KeyAを作成してkeyBで暗号化するユーザーには、keyBに対するVIEW DEFINITION権限が必要です。
  • KeyAを開いてkeyBで復号化するユーザーには、KeyBに対するCONTROL権限が必要です。

あなたのシナリオ:

--UserA needs to create Asymmetric keys so needs ALTER ANY ASYMMETRIC KEY PERMISSION
GRANT ALTER ANY ASYMMETRIC KEY TO userA

--UserB needs to create Symmetric keys so needs ALTER ANY SYMMETRIC KEY PERMISSION
GRANT ALTER ANY SYMMETRIC KEY TO userB


--UserA creates Asymmetric keys that are used by userB to create Symmetric keys and later open them
--So userA must create the Asymmetric key and Also give CONTROL permission on the Asymmetric key to UserB

--Create Asymmetric key
CREATE ASYMMETRIC KEY asym_CommonKey 
WITH ALGORITHM = RSA_2048 
ENCRYPTION BY PASSWORD = 'admin@123'; 

--Give control permission to UserB
GRANT CONTROL ON ASYMMETRIC KEY::asym_CommonKey to UserB


--UserB creates a symmetric key using the Asymmetric key from userA
--Note, at this stage VIEW DEFINITION permission on the Asymmetric key would have been sufficient
CREATE SYMMETRIC KEY sym_CommonKey 
WITH ALGORITHM = AES_256 
ENCRYPTION BY ASYMMETRIC KEY asym_CommonKey

--UserB opens the Symmetric key, decrypting it with the Asymmetric Key
--Note, at this stage User B needs the CONTROL permission on the Asymmetric key.
OPEN SYMMETRIC KEY sym_CommonKey DECRYPTION BY ASYMMETRIC KEY asym_CommonKey with password ='admin@123'

ソース:

[〜#〜] msdn [〜#〜]

データベースに対するALTER ANY SYMMETRIC KEY権限が必要です。 AUTHORIZATIONが指定されている場合、データベースユーザーに対するIMPERSONATE権限またはアプリケーションロールに対するALTER権限が必要です。暗号化が証明書または非対称キーによる場合は、証明書または非対称キーに対するVIEW DEFINITION権限が必要です。対称キーを所有できるのは、Windowsログイン、SQL Serverログイン、およびアプリケーションロールのみです。グループとロールは対称鍵を所有できません。

MSDN 2

呼び出し元は、キーに対する何らかの権限を持っている必要があり、キーに対するVIEW DEFINITION権限が拒否されてはなりません。追加の要件は、復号化メカニズムによって異なります。

DECRYPTION BY CERTIFICATE: CONTROL permission on the certificate and knowledge of the password that encrypts its private key.

DECRYPTION BY ASYMMETRIC KEY: CONTROL permission on the asymmetric key and knowledge of the password that encrypts its private key.

DECRYPTION BY PASSWORD: knowledge of one of the passwords that is used to encrypt the symmetric key.
11
Edward Dortland