web-dev-qa-db-ja.com

SQL Server 2012ログインを有効にして、作成したデータベースを作成、変更、およびドロップする方法を教えてください。

CIログインに適切なGRANT権限を割り当てようとしています。これにより、次のことが可能になります。

  • テストDBを作成する
  • それを変える
  • このテストDBをドロップします(それのみ)。

しかし、SQL Server 2012 GRANT CREATE ANY DATABASEは、作成のみを許可し、データベースの変更と削除は許可しません(新規データベースは作成者をdboとして保持しないため)。

Sysadminロールを与えるだけではセキュリティリスクが高すぎるので、他に必要なGRANTSは何か考えられますか?

4
SyRenity

まずする必要があります

  • データベース作成権限を持つログインを作成します。ログインではデータベースを削除できないことに注意してください。

    USE [master]
    GO
    
    CREATE LOGIN [Kin] WITH PASSWORD=N'somePassw0rd', DEFAULT_DATABASE=[master],
    DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    GO
    use [master]
    GO
    -- Grant create any database, but not drop or alter any database
     GRANT CREATE ANY DATABASE TO [Kin]
    GO
    
  • 変更または削除する権限を付与するデータベースにログインをマップします。

    -- for drop database, you just need db_owner
    USE [test_drop]
    GO
    CREATE USER [Kin] FOR LOGIN [Kin] 
     GO
    
  • ユーザーをdb_ownerロールに追加します。

      EXEC sp_addrolemember 'db_owner', 'Kin'
    

次に、作成/変更および削除するためにテストします。

EXECUTE AS LOGIN = 'Kin'

create database test_drop


EXECUTE AS LOGIN = 'Kin'
use test_drop

create table test (fname char(1))


EXECUTE AS LOGIN = 'Kin'
select * from test

EXECUTE AS LOGIN = 'Kin'
alter database test_drop 
set offline

EXECUTE AS LOGIN = 'Kin'
alter database test_drop 
set online

EXECUTE AS LOGIN = 'Kin'
drop database [test_drop]

他のいくつかのdbを削除してみてください:

EXECUTE AS LOGIN = 'Kin'
alter database [test_kin] 
set online

以下はエラーです:

メッセージ5011、レベル14、状態9、行2ユーザーにデータベース「test_kin」を変更する権限がないか、データベースが存在しないか、データベースがアクセスチェックを許可する状態にありません。メッセージ5069、レベル16、状態1、行2のALTER DATABASEステートメントが失敗しました。

3
Kin Shah

DROP DATABASEのドキュメント ごと:

「データベースのCONTROL権限、ALTER ANY DATABASE権限、またはdb_owner固定データベースロールのメンバーシップが必要です。」

これを処理するための可能な方法は、db_ownerロールの一部としてモデルデータベースにユーザーを追加することです。 SQL Serverで作成されたすべてのデータベースはそのコピーであり、すべてのユーザー、オブジェクト、許可などを保持します。これは、新しいデータベースが作成されるたびに、CIユーザーをdb_ownerロールに保持し、削除/変更する権限を持つことを意味しますそのデータベース。もちろん、欠点は、CIプロセスの一部として作成されていないデータベースにも引き継がれることです。これが不要な場合は、手動で削除する必要があります。

それ以外の場合は、この開始を制限するためのハードルが非常に複雑になるため、CIログインにはデータベースを作成および削除するための十分な権限が必要です。

0
Mike Fal