db_ddladmin vs db_owner
私がテストし、読んだことから私が知ることができるものから、あなたのリストの大部分は、db_ddladmin
DOESがあなたに許すことを除いて正確に見えますCREATE SCHEMA
。リストした他のセキュリティ許可が実際に拒否されたことを確認しました。
DDLADMINでのみ拒否:
[ALTER ANY USER]
[BACKUP DATABASE]
、[BACKUP LOG]
、[CHECKPOINT]
[ALTER ANY APPLICATION ROLE]
、 [ALTER ANY ROLE]
[DROP DATABASE]
そのことに注意してください。。。
db_datareader
SELECT
すべてのテーブルへのアクセスを許可します
db_datarwriter
できるようになりますINSERT
、UPDATE
と、DELETE
すべてのテーブルへのアクセス
db_executor
EXECUTE
すべての実行可能オブジェクトへのアクセスを許可します
さらに、db_ddladminロールのアクセス許可があることを意味する場合があります。。。
注: 2005年から2014年までのSQL Serverには非常に多くのバージョンがあるため、最初に少数のユーザーにテストして、ねじれなどを解消するために誰が叫んでいるかを確認することをお勧めします。
このロールで所有するオブジェクトはDBOによって所有されないため、このレベルで何かに問題がある場合は、所有権の変更の問題に対処する必要があります。私はこれが問題になると100%確信していませんが、念のために言及する価値があります。
出典:所有権チェーン
このロール(SQL Serverのバージョンによって異なる場合があります)を使用すると、現在のDBで定義されているSQLセキュリティ原則を、所有するオブジェクトに追加できます。すべてのオブジェクト(所有していないオブジェクト)だけでなく、新しいサーバーを追加することもできますレベルは、DBレベルにプリンシパルを定義しました。
また、DBOロールのアクセス許可がないことも意味します。。。
注: 2005年から2014年までのSQL Serverには非常に多くのバージョンがあるため、最初に少数のユーザーにテストして、ねじれなどを解消するために誰が叫んでいるかを確認することをお勧めします。
その他の考慮事項
これはケースバイケースでレビューされていると述べているので
現在制限されている権限の1つはdb_owner権限です。
この権限はケースバイケースでレビューされていますが、一般的な変更はdb_owner権限を次のものに置き換えることです。
- db_datareader
- db_datawriter
- db_ddladmin
- db_executor
db_ddladmin
おそらく、実際に必要なDBレベルオブジェクトよりも多くのロールを付与するのではなく、各人にロールを付与するのではなく、各人が必要とする「すべてのオブジェクト」DBレベルアクセス用に追加のカスタムロールを作成することを検討しましたか?
私は通常、彼らが仕事をするために必要なものを正確に与え、それ以上は何も与えません。DB内のすべてのオブジェクトへのDBレベルのオブジェクトアクセスに「通常」または「標準」の必要がある場合は、次のようなカスタムDBロールを作成しますdb_executor
しかし、私の下の例を参照してください。これにより、セキュリティのためにDBでオブジェクトレベルを明示的に取得していない場合、特定のDBのすべてのDBオブジェクトに本当に必要なものを人々に付与できます。
----Custom Database Roles
/* CREATE A NEW ROLE -- Execute to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Execute
GRANT EXECUTE TO db_All_StoredProc_Execute
/* CREATE A NEW ROLE -- Alter to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Alter
GRANT ALTER ANY SCHEMA TO db_All_StoredProc_Alter
/* CREATE A NEW ROLE -- View Definition to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_View
GRANT VIEW DEFINITION TO db_All_StoredProc_View
/* CREATE A NEW ROLE - Any schema alter and create procedure permissions */
-- Database specific
CREATE ROLE db_All_CreateProc_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateProc_AlterSchema
GRANT CREATE PROCEDURE TO db_All_CreateProc_AlterSchema
GO
/* CREATE A NEW ROLE - Any schema alter and create table permissions */
-- Database specific
CREATE ROLE db_All_CreateTable_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateTable_AlterSchema
GRANT CREATE TABLE TO db_All_CreateTable_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create function permissions */
-- Database specific
CREATE ROLE db_All_CreateFunction_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateFunction_AlterSchema
GRANT CREATE FUNCTION TO db_All_CreateFunction_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create aggregate permissions */
-- Database specific
CREATE ROLE db_All_CreateAggregate_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateAggregate_AlterSchema
GRANT CREATE AGGREGATE TO db_All_CreateAggregate_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create view permissions */
-- Database specific
CREATE ROLE db_All_CreateView_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateView_AlterSchema
GRANT CREATE VIEW TO db_All_CreateView_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create schema permissions */
-- Database specific
CREATE ROLE db_All_CreateSchema_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateSchema_AlterSchema
GRANT CREATE SCHEMA TO db_All_CreateSchema_AlterSchema
私はまた、あなたが明示的にそうでない場合は作成することを検討して検討する必要がありますdb_DDLAdmin_Restrictionの役割共有したいと思ったDENY
ものを制限するために、db_ddladmin
あなたは少なくとも、あなたは彼らにこの役割を付与したDB上でこれを作成することができるようにへのアクセスを提供すると明示的に設定しDENY
、実際のオブジェクトタイプのために、など。あなたは彼らにアクセスさせたくない。
たとえば、あなたが知っている場合、彼らは間違いなく、ストアドプロシージャと関数を作成することが、あなたは除外することができますDENY CREATE FUNCTION
、DENY CREATE PROCEDURE
、DENY ALTER ANY SCHEMA
。
---Create ddladmin restriction custom DB role
DENY ALTER ANY ASSEMBLY TO db_DDLAdmin_Restriction
DENY ALTER ANY ASYMMETRIC KEY TO db_DDLAdmin_Restriction
DENY ALTER ANY CERTIFICATE TO db_DDLAdmin_Restriction
DENY ALTER ANY CONTRACT TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_DDLAdmin_Restriction
DENY ALTER ANY DATASPACE TO db_DDLAdmin_Restriction
DENY ALTER ANY FULLTEXT CATALOG TO db_DDLAdmin_Restriction
DENY ALTER ANY MESSAGE TYPE TO db_DDLAdmin_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING TO db_DDLAdmin_Restriction
DENY ALTER ANY ROUTE TO db_DDLAdmin_Restriction
DENY ALTER ANY SCHEMA TO db_DDLAdmin_Restriction
DENY ALTER ANY SERVICE TO db_DDLAdmin_Restriction
DENY ALTER ANY SYMMETRIC KEY TO db_DDLAdmin_Restriction
DENY CHECKPOINT TO db_DDLAdmin_Restriction
DENY CREATE AGGREGATE TO db_DDLAdmin_Restriction
DENY CREATE DEFAULT TO db_DDLAdmin_Restriction
DENY CREATE FUNCTION TO db_DDLAdmin_Restriction
DENY CREATE PROCEDURE TO db_DDLAdmin_Restriction
DENY CREATE QUEUE TO db_DDLAdmin_Restriction
DENY CREATE RULE TO db_DDLAdmin_Restriction
DENY CREATE SYNONYM TO db_DDLAdmin_Restriction
DENY CREATE TABLE TO db_DDLAdmin_Restriction
DENY CREATE TYPE TO db_DDLAdmin_Restriction
DENY CREATE VIEW TO db_DDLAdmin_Restriction
DENY CREATE XML SCHEMA COLLECTION TO db_DDLAdmin_Restriction
DENY REFERENCES TO db_DDLAdmin_Restriction
GO