2

私はおそらく明らかな何かを見逃しているか、これを間違った方法で行っていますが、ここにそれがあります:

SQL Server 2005でスカラーCLR関数を作成しました。これには1つのパラメーター(int)があり、を返しますvarchar(2000)。sysadminロールにアクセス許可を具体的に付与し、db_ownerを含む他のロールの実行を制限する方法を理解するのに問題があります。

パーミッションの付与と取り消しは、CLR関数でも他のUDFと同じだと思います。これは、アプリケーションのSecurityUserテーブルに格納されているパスワードを復号化するため、機密性の高い機能です。sysadminロールのメンバー以外は誰にも実行できないようにします。

データベースでは、最初にデータベースからsysadminに付与を試みました。

grant execute ON dbo.fCrossTabDx1 TO sysadmin

そしてもちろんエラーを受け取りました:

メッセージ15151、レベル16、状態1、行1
ユーザー'sysadmin'が存在しないか、権限がないため、ユーザー'sysadmin'が見つかりません。

db_securityadmin次に、データベース内の役割であるにアクセス許可を付与しようとしましたが、エラーが発生しました。

メッセージ4617、レベル16、状態1、行1
特別な役割への、または特別な役割からのアクセス許可を付与、拒否、または取り消すことはできません。

ですから、可能であれば、誰かが私を正しい方向に導いてくれれば幸いです。

  1. db_owner権限を持つユーザーが関数を実行することを制限できますか?
  2. 関数に対してsysadminロールの実行権限のみを許可できますか?

ありがとう。

4

1 に答える 1

2

セキュリティ保護可能な所有者の権限を制限することはできません。db_owner定義上、データベース内のすべてのセキュリティ保護可能なメンバー。関数はデータベースで保護可能です。エルゴ、関数の権限をdboまたはdb_ownerロールのメンバーに制限することはできません。

あなたはそれを誤解している:

  • 独自の暗号化/復号化機能をローリングします。組み込みの暗号化機能を使用します。
  • 暗号化セキュリティの権限に依存します。復号化パスワードの知識に依存する必要があります。パスワードを知っている人はデータを復号化できます。
  • CLR関数には、復号化パスワードが組み込まれていると確信しています。コードに復号化キーを埋め込みます。

暗号化階層を読み取って内部化します。標準的な方法に従ってください。自分で発明しないでください。

于 2012-04-16T17:03:51.693 に答える