web-dev-qa-db-ja.com

分離されたデータベースファイルのアクセス許可

データベースが特定の基準を満たしたときにアーカイブ用にデータベースを切り離すスクリプトがあります。スクリプトは、Ghost of DBAPastによってローカル管理者アカウントでSSISによって実行されます。設計上、(これは一般的にデータベースをデタッチすることを意味します)他のすべての所有権を削除し、所有権をローカル管理者アカウント専用にします。ここが奇妙になるところです:

次の2つの方法を除いて、権限を元に戻すことはできないようです。

  1. WindowsGUIのプロパティ/セキュリティなど。
  2. 異なる権限を継承しているサブディレクトリにファイルをコピーします。

私が仕事に就けないこと:

  1. PowerShellSet-Acl
  2. PowerShell移動アイテム
  3. WindowsGUIでのファイルの移動/切り取り
  4. icacls

所有権が変更される理由は理解できますが、後でアクセス許可を編集するのがそれほど難しい理由や、ファイルがコマンドラインツールから本質的に隠されているように見える理由は理解できません。

変更の理由は、何らかの理由でデータをテープに転送する前にオンラインに戻す必要がある場合があり、最初にアクセス許可を変更せずにデータベースを接続できないためです。

ありがとう

1
Erik Darling

データベースサーバーでトレースフラグ1802を有効にする必要があります。これにより、データベースをデタッチするときにSQL Serverが継承可能なアクセス許可を保持できるようになるため、今後この問題が発生することはありません。

http://support2.Microsoft.com/kb/922804

DBCC TRACEON(1802、-1)

SQL Serverサービスの起動パラメーターに追加します http://msdn.Microsoft.com/en-us/library/ms190737(v = sql.110).aspx

2
Alf47

多分これはあなたの質問への答えではありませんが、私はそれが関連していると信じています。できればコメントを書きますが、使用した写真とスクリプトを追加したいと思います。

以前と同じ問題が発生しました。データベースを再接続しようとすると、次のエラーメッセージが表示されました。

enter image description here

これを整理する方法は、データベースをデタッチするために使用されるログインを偽装してから、次のコマンドを実行することでした。DB所有者をすぐに変更することに注意してください。

USE [master]
GO
CREATE DATABASE [DEOrderArchive] ON 
( FILENAME = N'Y:\SQLDATA\REP\DEOrderArchive.mdf' ),
( FILENAME = N'Z:\SQLLogs\REP\DEOrderArchive.ldf' )
FOR ATTACH
GO
USE [DEOrderArchive]
GO
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
GO
0