私は、ユーザーには表示されない(プライベート)ストアドプロシージャをT-SQLで作成しました。彼には実行権限がありません。SQL CLRの権利:CLRのストアドプロシージャを呼び出す
CREATE PROCEDURE [dbo].[GetEntries]
AS
BEGIN
SELECT * FROM sometable
END
次に、ユーザーに実行権限があるCLRストアドプロシージャを作成しました。このストアドプロシージャは私のプライベートプロシージャを呼び出します。
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = "context connection=true";
conn.Open();
SqlCommand command = new SqlCommand("exec dbo.[GetEntries] ", conn);
...
パブリックCLRストアドプロシージャを呼び出すと、プライベートストアドプロシージャを呼び出す権限がないというエラーが発生しました。これは、私の接続文字列が "context connection = true"で、ストアドプロシージャがユーザコンテキスト(ユーザ接続)にあるためです。
プライベートストアドプロシージャを呼び出すパブリック(ユーザーに表示される)T-SQLストアドプロシージャを書き込むときに、このストアドプロシージャを実行できます。
CREATE PROCEDURE [dbo].TSQLPublicSP
AS
BEGIN
Exec dbo.[GetEntries]
END
だから私の質問は、私はそれがT-SQLストアドプロシージャからである接続のようなSQL-CLRストアドプロシージャで、接続文字列を設定する方法、です。私はSQL-CLR接続文字列にdatabasenameを設定したくありません。私は、データベース名を形成し得ることができればそれは私のためにOKになりSqlContext
:
SqlConnection("server=LOCALHOST;integrated security=yes;database=" &
SqlContext.???CurrentDatabase???)