我有一个数据库服务器,数据库中正在使用一些受限用户的数据库。我需要限制用户不能更改.MDF
和.LDF
自动增长设置。请指导我限制用户。
我认为有两种方法可以获得此访问权限:
但我在Management Studio中找不到任何选项来在服务器范围内执行这些选项并从用户那里获取访问权限。
谢谢。
你可以执行以下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
为了防止更改数据文件的自动增长属性,我在使用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