ロールを作成してそれらに特権を付与した後、ユーザーが他のユーザーに特権を付与できるように、grantオプションを使用して指定したロールの特権をユーザーに付与したいと思います。
EXEC sp_addrolemember 'db_owner', 'sabertazimi'
このようにしても、「sabertazimi」が自分の特権を他の人に付与することはできません。
質問で使用した特定のコードでは、WITH GRANT OPTION
を使用できません。これは通常、権限を付与するために使用されるため、ユーザーは他のユーザーに同じコードを付与できます。
詳細と例については、次を参照してください。 https://docs.Microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addrolemember-transact-sql
許可
フレキシブルデータベースロールにメンバーを追加するには、次のいずれかが必要です。
Db_securityadminまたはdb_owner固定データベースロールのメンバーシップ。
役割を所有する役割のメンバーシップ。
ロールに対するALTER ANY ROLE権限またはALTER権限。
固定データベースロールにメンバーを追加するには、db_owner固定データベースロールのメンバーシップが必要です。
GRANT
ステートメントを使用する特権については、次のリンクを参照してください。
みなさんご存じのとおり:
GRANT ... WITH GRANT OPTIONは、権限を受け取るセキュリティプリンシパルに、指定された権限を他のセキュリティアカウントに付与する機能を与えることを指定します。
権限を取得するプリンシパルがroleまたはWindowsグループである場合、グループまたはロールのメンバーではないユーザーにオブジェクト権限をさらに付与する必要がある場合は、AS句を使用する必要があります。 グループまたはロールではなくユーザーだけがGRANTステートメントを実行できるため、グループまたはロールの特定のメンバーは、AS句を使用してロールまたはグループを明示的に呼び出す必要があります権限を付与する際のメンバーシップ。
次の例は、ロールまたはWindowsグループに付与するときにWITH GRANT OPTIONがどのように使用されるかを示しています。
-- Execute the following as a database owner
GRANT EXECUTE ON TestProc TO TesterRole WITH GRANT OPTION;
EXEC sp_addrolemember TesterRole, User1;
-- Execute the following as User1
-- The following fails because User1 does not have the permission as the User1
GRANT EXECUTE ON TestMe TO User2;
-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestMe TO User2 AS TesterRole;
完全なドキュメントは次のリンクで読むことができます: GRANT(Transact-SQL)
この助けを願っています。