在SQL Server 2008 R2上觸發 trigger 時呼叫C#(CLR)程式 - part2

在SQL Server 2008 R2上觸發 trigger 時呼叫C#(CLR)程式 - part2

接續上一篇在SQL Server 2008 R2上觸發 trigger 時呼叫C#(CLR)程式

 

要使用EXTERNAL_ACCESS的權限,CLR必須是有簽章的,可以在專案的屬性頁裡的Signing頁籤內設定

image

設定好簽章後,要在SQL端產生簽章金鑰

 

在SQL輸入下列指令

   1: USE master
   2: CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\temp\SqlServerProject2.dll'   
   3: CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey   
   4: GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin; 
   5: GO 

一定要在master之下產生金鑰,第二行程式碼就是產生金鑰的指令

 

他會依據dll內的簽章來產生,所以如果SQL是在遠端,那麼dll要先丟過去。

 

第三行根據此金鑰新增一個登入帳號,以後此dll的權限就會和此登入帳號相同

 

第四行設定權限

 

除了產生金鑰要下指令之外,另外兩個指令可以直接在SQL端的介面上設定

image

新增一個登入者

 

image

選擇對應非對稱金鑰

 

image

接著設定安全權限

 

當此三個指令成功之後

 

我們也可以在SQL管理介面看到

image

金鑰

image

帳號

 

這樣一來,就可以直接在VS上面佈署dll到SQL Trigger了

 

image

在專案的屬性頁的Database頁籤裡就可以設定要用EXTERNAL_ACCESS的權限佈署了!

 

同理,如果要將佈署權限提升到UNSAFE,只要改變登入帳號的安全權限,增加允許Unsafe assembly就可以了!