用户登录时自动在SQL Server中创建数据库

用户登录时自动在SQL Server中创建数据库,sql,sql-server,windows,Sql,Sql Server,Windows,当用户使用Windows身份验证登录到SQL Server时,我需要自动创建数据库(以及创建表等)。如果用户名为smith,将创建一个名为smith的新数据库,用户将拥有对该数据库的完全访问权限 你知道怎么做吗?第一个问题是为什么每次有人登录时都要创建一个新的数据库。为什么不重用现有的数据库?如果有人登录1000次会发生什么?你会创建很多数据库 要创建数据库,可以使用如下命令(在批处理脚本中) 确实可以,但编写、测试、调试和确保安全性都是一项重要的工作。这是一个非常糟糕的想法。您是否考虑过在现有

当用户使用Windows身份验证登录到SQL Server时,我需要自动创建数据库(以及创建表等)。如果用户名为
smith
,将创建一个名为
smith
的新数据库,用户将拥有对该数据库的完全访问权限


你知道怎么做吗?

第一个问题是为什么每次有人登录时都要创建一个新的数据库。为什么不重用现有的数据库?如果有人登录1000次会发生什么?你会创建很多数据库

要创建数据库,可以使用如下命令(在批处理脚本中)


确实可以,但编写、测试、调试和确保安全性都是一项重要的工作。这是一个非常糟糕的想法。您是否考虑过在现有数据库中创建模式?如果两个Smith登录怎么办?谢谢你的评论。我找到了解决方案-有一个登录触发器。因此,我可以创建数据库并在触发器中加载数据。@user3019981如果您犯了多次错误中的任何一次,也可以使整个SQL Server实际上无法使用。SQL登录触发器不适用于未初始化的用户。它们既危险又狡猾,这就是为什么一开始我们没有人自愿这么做。
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'