类型:数据库类大小:40.7M语言:中文评分:6.6标签:立即下载I .后台
一天晚上凌晨一点,我接到领导的通知,我们数据库的所有密码都需要修改一次。原因是我们的数据库账号和密码明明写在Web服务器的配置文件config里,这个配置文件可能会泄露。更糟糕的是,我们的数据库可以通过外部网络访问。虽然有端口可以映射,但我们的数据仍然处于危险状态,因此DBA需要争分夺秒地更改数据库的帐户密码。
我们大约有30台数据库服务器,每台机器上运行着许多数据库。有创建数据库账户经验的同学会发现使用SSMS创建账户密码有多痛苦,需要点击很多复选框,尤其是创建可以访问整个数据库实例中所有数据库的数据库时(虽然我们提倡每个数据库的账户和密码都不一样,但更严格的要求可能要求在同一个数据库下设置不同权限的账户进行管理)
如果我们有效地管理数据库帐户,我们可以轻松地完成这个任务,并且只需要一个SQL来管理它。在这里,我为大家倡导一个安全易维护的方案:SQL Server数据库账号密码安全设计
二、设计总结
我们必须首先了解我们的问题是什么:
1.我们厌倦了点击复选框;一个接一个;
2.点击复选框这么多次,我们不能保证所有的点击都是正确的;
所以我们首先需要思考的就是有没有办法解决这些问题。上述操作SSMS使用户能够将操作保存为脚本,我们可以自己编写SQL脚本来完成类似的工作。为了模拟在SSMS上的操作,我们需要获取数据库实例中包含的所有数据库,然后为每个数据库创建一个帐号和密码。我们可以以游标的形式循环数据库,并创建帐户和密码。最后,我们需要禁用sa帐户。
在下面的通用SQL模板中修改@user和@password的值,将下面的代码复制到SSMS执行,从而生成适合这个数据库实例的SQL脚本[生成的脚本代码],然后我们可以将生成的SQL代码复制到SSMS执行。
执行下面两个脚本只需要几秒钟,所以20台服务器对你来说很容易。
三、通用的SQL模板
-创建数据库帐户
DECLARE @dbname varchar(100)
DECLARE @user varchar(100)
DECLARE @password varchar(100)
DECLARE @sql varchar(最大值)
SET @user='UfranimdA_gz '
SET @password='o23#25R@8a8A!@23#@%'
' SET @sql='
使用[主]
去
使用密码=N ' ' @ PASSWORD ' ',DEFAULT_DATABASE=[master],CHECK _ expire=OFF,CHECK_POLICY=ON创建登录[' @user ']
去
执行主机.sp _ addsrvrolemember @ logi name=N ' ' @ user ' ',@rolename=N''sysadmin ' '
“开始”
PRINT(@sql)
DECLARE @itemCur CURSOR
SET @itemCur=光标为
从状态=0的系统数据库中选择名称
OPEN @itemCur
从@itemCur取下一个到@dbname
WHILE @@FETCH_STATUS=0
开始
' SET @sql='
使用[' @dbname ']
去
为登录[“@ USER”]创建用户[“@ USER”]
去
使用[' @dbname ']
去
用DEFAULT_SCHEMA=[dbo]更改用户[“@ USER”]
去
使用[' @dbname ']
去
EXEC sp _ addrole member N ' ' db _ owner ' ',@ user ' ' '
“开始”
PRINT(@sql)
从@itemCur取下一个到@dbname
结束
CLOSE @itemCur
解除分配@itemCur
-禁用sa帐户
' SET @sql='
使用[主]
去
ALTER LOGING[sa]DISABLE
“开始”
PRINT(@sql)
四.生成的脚本代码
-创建数据库帐户密码
使用[主]
去
用密码创建登录[UfranimdA _ gz]=N ' o23 # 25R @ 8a8A!@23#@% ',DEFAULT_DATABASE=[master],CHECK _ expire=OFF,CHECK_POLICY=ON
去
执行主机.sp _ addsrvrolemember @ logi name=N ' ufranimda _ gz ',@rolename=N'sysadmin '
去
使用[主]
去
为登录创建用户
去
使用[主]
去
用DEFAULT_SCHEMA=[dbo]更改用户
去
使用[主]
去
EXEC sp_addrolemember N'db_owner ',N'UfranimdA_gz '
去
使用[tempdb]
去
为登录创建用户
去
使用[tempdb]
去
用DEFAULT_SCHEMA=[dbo]更改用户
去
使用[tempdb]
去
EXEC sp_addrolemember N'db_owner ',N'UfranimdA_gz '
去
使用[模型]
去
为登录创建用户
去
使用[模型]
去
用DEFAULT_SCHEMA=[dbo]更改用户
去
使用[模型]
去
EXEC sp_addrolemember N'db_owner ',N'UfranimdA_gz '
去
使用[msdb]
去
为登录创建用户
去
使用[msdb]
去
用DEFAULT_SCHEMA=[dbo]更改用户
去
使用[msdb]
去
EXEC sp_addrolemember N'db_owner ',N'UfranimdA_gz '
去
使用[数据库管理员]
去
为登录创建用户
去
使用[数据库管理员]
去
用DEFAULT_SCHEMA=[dbo]更改用户
去
使用[数据库管理员]
去
EXEC sp_addrolemember N'db_owner ',N'UfranimdA_gz '
去
使用[测试数据库]
去
为登录创建用户
去
使用[测试数据库]
去
用DEFAULT_SCHEMA=[dbo]更改用户
去
使用[测试数据库]
去
EXEC sp_addrolemember N'db_owner ',N'UfranimdA_gz '
去
使用[主]
去
ALTER LOGING[sa]DISABLE
去
五、特别说明
1.这里生成的结构化查询语言脚本中包含了系统数据库:master、model、msdb、tempdb、为了方便我就没对这些数据库进行限制的,希望以后可以修正下这个脚本。
2.这里再次推荐大家使用同一的数据库帐号密码的管理,无论是安全还是方便维护都是大有好处的结构化查询语言服务器数据库帐号密码安全设计,大家可以提些其它的想法。