3
当用户使用Windows身份验证登录到SQL Server时,需要自动创建数据库(并创建表等)。如果用户名是smith
,则会创建一个名为smith
的新数据库,并且用户将拥有对该数据库的完全访问权限。用户登录时在SQL Server中自动创建数据库
任何想法如何做到这一点?
当用户使用Windows身份验证登录到SQL Server时,需要自动创建数据库(并创建表等)。如果用户名是smith
,则会创建一个名为smith
的新数据库,并且用户将拥有对该数据库的完全访问权限。用户登录时在SQL Server中自动创建数据库
任何想法如何做到这一点?
第一个问题就是为什么你想在每次有人登录时创建一个新的数据库。为什么不重用现有的数据库?如果有人登录1000次会发生什么 - 您将创建大量数据库!
要创建数据库,你可以使用类似以下的命令(在批处理脚本)
if exists (select * from sys.syslogins where name='$(dbname)')
drop login $(dbname);
GO
if exists(select * from sys.databases where name='$(dbname)')
drop database $(dbname);
GO
create database $(dbname);
GO
EXEC sp_addsrvrolemember '$(dbloginname)', 'bulkadmin'
EXEC sp_addsrvrolemember '$(dbloginname)', 'dbcreator'
EXEC sp_addsrvrolemember '$(dbloginname)', 'diskadmin'
EXEC sp_addsrvrolemember '$(dbloginname)', 'processadmin'
EXEC sp_addsrvrolemember '$(dbloginname)', 'securityadmin'
EXEC sp_addsrvrolemember '$(dbloginname)', 'serveradmin'
EXEC sp_addsrvrolemember '$(dbloginname)', 'setupadmin'
EXEC sp_addsrvrolemember '$(dbloginname)', 'sysadmin'
做些力所能及,但它是写一个显著的努力,测试,调试并确保它是既安全又安全。 – RBarryYoung
这是一个非常糟糕的主意。您是否考虑在现有数据库中创建模式?如果两个史密斯登录会怎么样? –
感谢您的意见。我找到了解决方案 - 有一个登录触发器。所以我可以创建数据库并在触发器中加载数据。 – user3019981