如何在SQL Server范围内禁用自动增长

时间:2017-12-20 10:58:44

标签: sql-server ssms

我有一个数据库服务器,数据库中正在使用一些受限用户的数据库。我需要限制用户无法更改.MDF.LDF自动增长设置。请指导我限制用户。

我认为有两种方法可以获得此访问权限:

  1. 禁用数据库中的自动增长
  2. 限制MDF和LDF的最大大小
  3. 但我在Management Studio中找不到任何选项,可以在服务器范围内执行这些选项,也可以从用户那里获得访问权。

    感谢。

1 个答案:

答案 0 :(得分:0)

您可以执行以下ALTER DATABASE command,使用未记录的stored procedure sp_Msforeachdb

为所有数据库设置自动增长选项

表示单个数据库(仅限并行数据仓库实例)

ALTER DATABASE [database_name] SET AUTOGROW = OFF

适用于所有数据库

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

虽然这不是服务器变量或实例设置,但它可以帮助您简化更新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