2017-12-20 19 views
1

제한된 사용자가있는 일부 데이터베이스가 데이터베이스에서 사용되는 데이터베이스 서버가 있습니다. .MDF.LDF 자동 증가 설정을 변경할 수 없도록 사용자를 제한해야합니다. 사용자를 제한하도록 안내해주십시오.SQL Server에서 자동 증가를 비활성화하는 방법

나는이 액세스 얻을 수있는 두 가지 방법이 생각 :

  1. 해제 자동 증가 데이터베이스의
  2. 제한 MDF의 최대 크기와 LDF

는하지만 어떤 옵션을 찾을 수 없습니다 Management Studio에서 서버 전체를 관리하고 사용자로부터 액세스 할 수도 있습니다.

감사합니다.

답변

0

모든 데이터베이스에 대한 단일 데이터베이스에 대한 stored procedure sp_Msforeachdb

문서화되지 않은 사용하는 모든 데이터베이스에 대한 오프 자동 증가 옵션을 설정 ALTER DATABASE command (병렬 데이터웨어 하우스의 경우 만 해당)

ALTER DATABASE [database_name] SET AUTOGROW = OFF 

다음 실행할 수 있습니다

EXEC sp_Msforeachdb "ALTER DATABASE [?] SET AUTOGROW = OFF" 

이것은 서버 변수 또는 인스턴스 설정이 아니지만 작업을 쉽게 수행하는 데 도움이 될 수 있습니다. f 또는 시스템 데이터베이스를 제외하면 다른 모든 데이터베이스에 대해 SQL Server 인스턴스

의 모든 데이터베이스를 업데이트, T-SQL은 모든 데이터베이스 파일의 목록을 얻을하고 준비 출력 명령을 실행할 수 있습니다 실행할 수있는 다음

select 
    'ALTER DATABASE [' + db_name(database_id) + '] MODIFY FILE (NAME = N''' + name + ''', FILEGROWTH = 0)' 
from sys.master_files 
where database_id > 4 

enter image description here

데이터 파일의 자동 증가 특성이 변경되는 것을 방지하기 위해 일단 DDL 트리거를 사용하여 DROP 테이블 문을 기록한 후에는 SQL Server DDL trigger을 준비했습니다. 트리거를 수행하면이 속성을 변경할 수 없으므로이 속성을 업데이트해야하는 경우이 트리거를 먼저 삭제해야합니다.

CREATE TRIGGER prevent_filegrowth 
ON ALL SERVER 
FOR ALTER_DATABASE 
AS 

declare @SqlCommand nvarchar(max) 
set @SqlCommand = (SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')); 


if(isnull(charindex('FILEGROWTH', @SqlCommand), 0) > 0) 
begin 
    RAISERROR ('FILEGROWTH property cannot be altered', 16, 1) 
    ROLLBACK 
end 
GO 

은 DDL 트리거에 대한 자세한 내용은, 귀하의 빠른 회신에 대한 Microsoft Docs

+0

감사를 참조하십시오. 하지만 내가 할 때 사용자는 자신의 데이터베이스를 편집 할 수 있습니다. 이 옵션에 대한 액세스를 피하기 위해 사용자를 제한하는 옵션이 있습니까? – masoud

+0

피드백을 주셔서 감사합니다 masoud, 모든 데이터베이스의 AutoGrow 속성에 대한 업데이트를 방지하는 DDL 트리거를 추가했습니다. 어쩌면 당신을 도울 수 있습니다. 요구 사항에 따라 마스터 또는 tempdb 등을 제외하는 필터를 추가 할 수 있습니다. – Eralper