サーバーファーム全体のすべてのデータベースユーザーのアクセス許可を削除および制限するプロジェクトを引き継ぎます。 (楽しい時間)
現在制限されている権限の1つは、db_owner権限です。
この権限はケースバイケースで検討されていますが、一般的な変更は、db_owner権限を次のものに置き換えることです:
(クライアントに通知するために)2つの間の正確な違いを定義したいと思います。
しかし、私の知る限り、この2つの違いは次のとおりです。
つまり、実質的には次のようになります。[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE]
、[BACKUP LOG]
、[CHECKPOINT]
[ALTER ANY APPLICATION ROLE]
、[ALTER ANY ROLE]
[DROP DATABASE]
Db_ownerが上記の4つのロールに置き換えられたら、ユーザーが失うものは他にありますか?
これは実際にはセキュリティの目的で多くの目的に役立ちますか?
私がテストして読んだ内容からわかることから、db_ddladmin
を除いて、リストの大部分は正確に見えますが、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
アクセスを許可します注:SQL Serverのバージョンは2005年から2014年まで非常に多くあるため、小さいバージョンを使用することをお勧めしますユーザーのセットは、最初にこれをテストして、誰がねじれなどを解決するために叫んでいるかを確認します。
このロールで所有するオブジェクトはDBOによって所有されないため、このレベルで何か問題が発生した場合は、所有権の変更の問題に対処する必要があります。これが問題になることは100%確実ではありませんが、念のため言及する価値はあります。
出典: 所有権の連鎖
このロールを使用すると(SQL Serverのバージョンによって異なる場合があります)現在のDBで定義されているSQLセキュリティ原則を、すべてのオブジェクトではなく、まだ所有しているオブジェクトに追加できる場合があります。 (所有していないもの)または新しいサーバーレベルで定義されたプリンシパルをDBレベルに追加します。
注:SQL Serverのバージョンは2005年から2014年まで非常に多くあるため、小さいバージョンを使用することをお勧めしますユーザーのセットは、最初にこれをテストして、誰がねじれなどを解決するために叫んでいるかを確認します。
DBOロールがないと、特定のSSMSデザイナGUIインターフェイス(SQL Serverのバージョンは異なります)がエラーなしで入力または開くことができない(たとえば、テーブルまたは列を変更するとき) T-SQLを介してそれが機能し、権限が設定されている場合でも、GUIを介して) SQL Serverの一部のバージョンでは、これが問題であるGRANT VIEW DEFINITION
を許可することで解決される場合があり、特定のバージョンのSQL Serverでのみ警告になることもあります。
リソース
データベース所有者またはdb_ownerロールのメンバーであるユーザーとしてログインしていません。所有していないテーブルへの変更を保存することはできません。
db_ddladminロールでは、SSMSでの「設計」機能の使用は許可されていません
「私たちはできる限りQAデータベースでユーザー/開発者にdboを与えないようにしています。これに関する問題の1つは、ユーザーテーブルなどのデータベースオブジェクトを作成および変更できる必要があることです。多くの開発者は、 MS SQLは、この種の作業ではGUI(SSMS)に固執する傾向があります。db_ddladmin(dboではなく)を付与すると、テーブルデザイナーGUIを介してテーブルまたは列を変更できなくなるという問題が発生します。代わりに、彼らはTSQLコマンドとその構文を学習するために追加の時間を費やす必要があります(二度と必要になることはないかもしれません)、または他のアクティビティから時間を費やすDBAチームを雇う必要があります。
これがバグなのか機能リクエストなのかはわかりませんが、ユーザーがTSQLを介してテーブルを変更するための十分な権限を持っているので、GUIは次のようなメッセージを表示するため、バグと見なします。
"データベースの所有者またはシステム管理者としてログオンしていません。所有していないテーブルへの変更を保存できない可能性があります。" AND "テーブル
[schema].[table]
は読み取り専用に設定されています。ユーザーにはこのテーブルに対する十分な権限がありません。"トレースは、チェックがis_member( 'db_owner')であることを示しているようですが、実際にはオブジェクトを変更する権限があるにもかかわらず、db_ddladminのメンバーは除外されます。 Microsoft SQL Server Management Studio」
2010年1月25日午前7時6分にエージェントDBAが投稿
私は同様の問題を抱えており、次の助成金を実行することでそれを解決することができました
GRANT view definition on schema:: <schemaname> to <username>
これはケースバイケースでレビューされていると述べているので
現在制限されている権限の1つは、db_owner権限です。
この権限はケースバイケースで検討されていますが、一般的な変更は、db_owner権限を次のものに置き換えることです。
- db_datareader
- db_datawriter
- db_ddladmin
- db_executor
db_ddladmin
ロールを付与するのではなく、各ユーザーが必要とする「すべてのオブジェクト」の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
また、明示的にDENY
を使用して作成することを検討する必要があるdb_DDLAdmin_Restrictionロールを共有したいのですが、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
SQLスクリプトを使用してすべての権限を一覧表示し、各ケースのユーザーを作成しました。
EXECUTE AS USER = 'test_user'
SELECT
permission_name
FROM fn_my_permissions(null, 'DATABASE')
ORDER BY subentity_name, permission_name
REVERT;
次に、結果を比較して、主に msdn からのドキュメントとともに、次のリストに行きました(特に参照されていない引用符はmsdnリンクからのものです)。
以下は、dboパーミッションを失うことになる人々に失うものを正確に通知するために使用したドキュメントの一部です。
[〜#〜] alter [〜#〜]
特定のセキュリティ保護可能なプロパティの所有権以外のプロパティを変更する機能を付与します。スコープに付与されると、ALTERはそのスコープ内に含まれるセキュリティ保護可能なものを変更、作成、または削除する機能も付与します。たとえば、スキーマに対するALTER権限には、スキーマからオブジェクトを作成、変更、および削除する機能が含まれています。
ALTER ANY APPLICATION ROLE
ALTER ANY DATABASE AUDIT
ALTER ANY ROLE
ALTER ANY USER
セキュリティ保護可能なデータベースの個々のインスタンスを作成、変更、または削除する機能を付与します。たとえば、ALTER ANY SCHEMAは、データベース内のスキーマを作成、変更、または削除する機能を提供します。
アプリケーションロール は、アプリケーションを独自のユーザーのような権限で実行できるようにするデータベースプリンシパルです。
Auditing SQL ServerまたはSQL Serverデータベースのインスタンスには、システムで発生するイベントの追跡とログ記録が含まれます。データベースレベルの監査仕様オブジェクトは監査に属します。監査ごとに、SQL Serverデータベースごとに1つのデータベース監査仕様を作成できます。
データベースロール は、データベースの権限を簡単に管理するために使用されます。SQLServerには、他のプリンシパルをグループ化するセキュリティプリンシパルであるいくつかのロールが用意されています。これらは、Microsoft Windowsオペレーティングシステムのグループのようなものです。データベースレベルのロールは、権限のスコープがデータベース全体に及びます。
[〜#〜]認証[〜#〜]
msdn. にあります
AUTHENTICATEおよびAUTHENTICATE SERVER権限は、クロスデータベースおよびサーバーアクセス(それぞれ)のシナリオでEXECUTE ASを使用する場合にのみ使用されます。
バックアップデータベース
バックアップログ
CONNECT REPLICATION
database replication 権限に使用されます。
[〜#〜]コントロール[〜#〜]
被付与者に所有権のような機能を付与します。被付与者は、セキュリティ保護可能なデバイスに対するすべての定義済み権限を効果的に持っています。 CONTROLを付与されたプリンシパルは、セキュリティ保護可能なオブジェクトに対するアクセス許可も付与できます。
CREATE ROLE
セキュリティ保護可能なデータベースを作成する権限を被付与者に付与します。
[〜#〜]ショープラン[〜#〜]
プラン表示権限は、Transact-SQLバッチで使用されるときにさまざまなプラン表示SETステートメントオプションに 使用されます 。
購読クエリの通知
Service Brokerインフラストラクチャ上に構築されたクエリ通知により、データが変更されたときにアプリケーションに通知できます。この機能は、Webアプリケーションなど、データベースからの情報のキャッシュを提供し、ソースデータが変更されたときに通知を受ける必要があるアプリケーションで特に役立ちます。
TAKE OWNERSHIP
被付与者が、付与されたセキュリティ保護可能なファイルの所有権を取得できるようにします。
データベースの状態を表示
動的管理ビューおよび関数(Transact-SQL) を表示するために使用されます。
VIEW DEFINITION
VIEW DEFINITION権限により、ユーザーは権限が付与されているセキュリティ保護可能なリソースのメタデータを表示できます。ただし、VIEW DEFINITION権限は、セキュリティ保護可能な自体へのアクセスを許可しません。たとえば、テーブルに対するVIEW DEFINITION権限のみが付与されているユーザーは、sys.objectsカタログビューでテーブルに関連するメタデータを表示できます。ただし、SELECTやCONTROLなどの追加の権限がないと、ユーザーはテーブルからデータを読み取ることができません。