こんにちは。Visual Studio 2013 (Professional) で、Unsafe な SQL CLR を登録(公開)させようとしていますが、次のエラーが発生します。
エラーメッセージ
SQL72014: .Net SqlClient Data Provider: メッセージ 10327、レベル 14、状態 1、行 1 アセンブリ '' の CREATE ASSEMBLY が失敗しました。PERMISSION_SET が UNSAFE の場合、アセンブリ '' は許可されません。次のいずれかに該当する場合に、アセンブリが許可されます。データベース所有者 (DBO) に UNSAFE ASSEMBLY 権限があり、データベースの TRUSTWORTHY データベース プロパティが有効になっている場合。または UNSAFE ASSEMBLY 権限のある対応するログインを含む証明書または非対称キーでアセンブリが署名されている場合。
ユーザーは sa です。
SQL Server Management Studio からsaでログインし、
SQL
1ALTER DATABASE dbname SET TRUSTWORTHY ON
は成功しました。
が、dbo または sa に UNSAFE ASSEMBLY 権限を与える方法がわかりません。
SQL
1GRANT UNSAFE ASSEMBLY to [sa]
とすれば
sa、dbo、エンティティ所有者、information_schema、sys、または自分自身に対する権限を許可、拒否、または取り消すことはできません。
と、
SQL
1GRANT UNSAFE ASSEMBLY to [dbo]
とすれば
メッセージ 15151、レベル 16、状態 1、行 1
ログイン 'dbo' を 検索 できません。存在しないか、権限がありません。
とエラーになります。
ちなみに
ログイン登録のあるユーザーを使って
SQL
1GRANT UNSAFE ASSEMBLY to [domain\user]
としたところ成功しましたが、公開処理でまったく同じエラーになります。
そして、判明したことは
データベースのオプション「信頼可能」がTrueになっているにもかかわらず、VisualSyudioから公開処理をするとFalseに変えられてしまうことです。
エラーメッセージでは2つの設定を行えばよいようですが、他にもどこかの設定を変える必要があるのでしょうか?
##補足事項
- SQLServer2014 の Express Edition に公開させようとしています。
- Visual Studio が公開処理用に生成したSQLコードがプロジェクト内のbinフォルダに作られるのですが、SQL Server Management Studio (GUI のコンソール)にsaでログイン(Visual Studio からの接続と同条件)から切り貼りして流すとうまく登録されて、使えます。
SQL
1-- :setvar DatabaseName "mydb" このような変数機能はSSMSでは使えないので、生成された生状態の$(DatabaseName)などは手編集で置き換え 2-- :setvar DefaultFilePrefix "mydb" 3 4CREATE ASSEMBLY [***] 5 AUTHORIZATION [dbo] 6 FROM 0x4D.....0000 7 WITH PERMISSION_SET = UNSAFE; 8 9GO 10ALTER ASSEMBLY [***] 11 DROP FILE ALL 12 ADD FILE FROM 0x4D.....0000 AS N'***.pdb'; 13 14GO 15CREATE PROCEDURE [dbo].[MyProcedure] 16@tableName NVARCHAR (MAX), @serverName NVARCHAR (MAX), @databaseName NVARCHAR (MAX) 17AS EXTERNAL NAME [***].[StoredProcedures].[MyProcedure] 18 19GO 20 21-- > コマンドは正常に完了しました。 22 23 24exec dbo.MyProcedure '12', '23', '34' 25 26-- > コマンドは正常に完了しました。 27

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/06 00:36