2012-04-16 9 views
2

をのdbownerシステム管理者としないように、ユーザー定義のCLR関数の実行を制限するが、ここでは行く:は、私はおそらく何かを明らかに不足しているか、間違った方法でこのことについてつもり

私はスカラーCLR機能を書きましたSQL Server 2005には1つのパラメータ(int)があり、varchar(2000)を返します。私は、sysadminロールに権限を与え、db_ownerを含む他のロールがそれを実行するのを制限する方法を考え出すのに困っています。

他のUDFと同じように、CLR関数の権限の付与と取り消しが同じであると推測しています。これは、アプリケーションのSecurityUserテーブルに格納されているパスワードを復号化するため、機密性の高い機能です。私は誰もがsysadminロールのメンバーを除いてそれを実行できるようにしたくありません。データベースにおいて

は、私が最初にデータベースからシステム管理者に付与しようとした:

grant execute ON dbo.fCrossTabDx1 TO sysadmin 

もちろん、エラーを受信した:

Msg 15151, Level 16, State 1, Line 1
Cannot find the user 'sysadmin', because it does not exist or you do not have permission.

Iは次にである、db_securityadminに権限を付与しようとしましたデータベースの役割とエラー:

Msg 4617, Level 16, State 1, Line 1
Cannot grant, deny or revoke permissions to or from special roles.

したがって、woul可能であれば、正しい方向に向かう誰かを感謝します。

  1. は私が機能を実行するからdb_owner権限を持つユーザーを制限し、
  2. することができます私は、機能上の唯一のsysadminロールの実行権限を許可することはできますか?

ありがとうございます。

+0

脇に:原則として、パスワードを解読できれば間違ったことをしています。通常、一方向の暗号化またはハッシュ処理は、パスワードの回復を防ぐために使用されます。 – HABO

答えて

2

セキュリティ保護された所有者のアクセス許可を制限することはできません。定義によって、db_ownerのメンバは、データベース内のすべてのセキュリティで保護されたメンバを所有しています。関数は、データベースをセキュリティで保護します。 Ergoでは、関数の権限をdboやdb_ownerロールのメンバーに制限することはできません。

あなたは間違ってそれをやっている:

  • 独自の暗号化/復号化機能を転がします。 built in encryption functionsを使用します。
  • は、暗号化セキュリティのアクセス許可に依存しています。あなたは解読パスワードの知識、すなわちに頼るべきです。パスワードはを知っている人がで解読できます。
  • あなたのCLR機能には、暗号化された復号化パスワードが組み込まれています。復号化キーをコードに埋め込み、大きな大きな大きな鍵です。

Encryption Hierarchyを読んで内部化してください。標準的なプラクティスに従います。 はありませんあなた自身を発明してください。

+0

ええ、私は考えています。私は怠惰なアプローチを取ったし、それを正しく行い、明示的にアクセス許可を与える必要があると思います。ありがとう。 –

+0

私は汚れた洗濯物をここに暴露したことを知っています。当時、SQLセキュリティを使用せず、アプリケーション・セキュリティ・レイヤーに依存するという決定は、必要とされるセキュリティ・レベルと非常に離れた場所でのオンサイトdbaサポートの不足に適していたようでした。しかし、今私はそれが私たちの仕事を救ったとは確信していないと私たちはおそらくSQLセキュリティモデルに戻り、ログインとデータベースのユーザーを管理するだけに依存する必要があります。これにより、アプリケーションの暗号化/復号化の必要性が完全に回避されます。よく取られた点、Remus。 –

関連する問題