Microsoft SQL Server 2017以降では、単一のユーザーにdbcreatorロールを付与しますが、固定のプレフィックスと一致する名前のデータベースの作成のみを許可します。
組み込み機能またはストアドプロシージャを使用して、データベースレベルでこれを行うことはできますか?
次のようなサーバーレベルのトリガーを使用できます。
CREATE OR ALTER TRIGGER [database_name_check] ON ALL SERVER
FOR CREATE_DATABASE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @event_data XML;
SET @event_data = EVENTDATA();
IF ((SELECT @event_data.value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(256)') ) = 'NADABRUTO\edarl'
AND (SELECT @event_data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(256)') ) NOT LIKE '%Stack%')
BEGIN
RAISERROR('NO CAN DO, BUCKAROO', 0, 1) WITH NOWAIT;
ROLLBACK;
END
END;
GO
ENABLE TRIGGER [database_name_check] ON ALL SERVER;
GO
または、次のようなデータベースレベルで:
USE StackOverflow2013
GO
CREATE OR ALTER TRIGGER [database_name_check] ON DATABASE
FOR CREATE_DATABASE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @event_data XML;
SET @event_data = EVENTDATA();
IF ((SELECT @event_data.value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(255)') ) = 'NADABRUTO\edarl'
AND (SELECT @event_data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(255)') ) NOT LIKE '%Stack%')
BEGIN
RAISERROR('NO CAN DO, BUCKAROO', 0, 1) WITH NOWAIT;
ROLLBACK;
END
END;
GO
ENABLE TRIGGER [database_name_check] ON DATABASE;
GO