1

SQLServerのストアドプロシージャのデフォルトのアクセス許可を知りたいのですが。たとえば、データベースにユーザーを作成しましたが、次のような実行権限を除いて、ロールまたは権限が付与されていません。

GRANT EXECUTE ON SCHEMA :: [dbo] TO [newUser]

後で私は(saログインとして)次のようなテーブルから選択するだけのストアドプロシージャを作成しました。

CREATE PROCEDURE dbo.selectX AS
BEGIN
 SELECT ID, NAME FROM MyTable
END

そして、私のユーザー[ newUser ]は、次のようなselectステートメントの結果を実行して表示できます。

EXEC dbo.selectX

これまで、ストアドプロシージャには、ユーザーにはないデフォルトのアクセス許可があると想定できます。UPDATEINSERTDELETEなどの他のDMLを試しましたが、ユーザーはプロシージャを正常に実行できました。だが!作成テーブルとしてddlを使用してプロシージャを作成したとき..次のようになります。

CREATE PROCEDURE dbo.crtNT AS
BEGIN

    CREATE TABLE del(id int) --for test
END

newUserを実行すると、次のようなエラーが発生します。

CREATE TABLE permission denied in database 'MyDb'

そして、ここに私の質問があります:デフォルトでは、ストアドプロシージャはDML(選択、挿入、更新vs.)では許可されていますが、DDL(作成、テーブルの削除vs.)では許可されていませんか?BooksOnlineや他の場所でこの状況についての説明が見当たらなかったからです。コメントは大歓迎です。

4

1 に答える 1

1

DDLステートメントの扱いが異なるという仮定は正しいです。

DMLステートメントを使用した手順は、所有権連鎖EXECUTE ASのメカニズムを介して機能しますが、ドキュメントからのこの引用には次のように記載されています。

所有権の連鎖はDMLステートメントにのみ適用されることに注意してください。

于 2012-05-28T16:22:28.773 に答える