SQLServer数据库帐号密码生成
小标 2018-06-13 来源 : 阅读 2308 评论 0

摘要:本文主要向大家介绍了SQLServer数据库帐号密码生成,通过具体的内容向大家展现,希望能对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库帐号密码生成,通过具体的内容向大家展现,希望能对大家学习SQLServer数据库有所帮助。

一、背景

在某天晚上凌晨1点,我收到领导的通知:需要把我们所有的数据库的密码都需要进行一次修改,原因是我们放到Web服务器的配置文件config中明文了我们的数据库帐号和密码,而且这份配置文件可能泄露了,更糟糕的是我们的数据库是可以通过外网进行访问的。虽然有端口进行映射,但是我们的数据依然处在危险的状态,所以这个时候DBA需要争分夺秒修改数据库的帐号密码。

我们的数据库服务器大概有30台,而且每台机器上跑了很多个数据库。有创建数据库帐号经验的同学你会发现:使用SSMS进行创建帐号密码是件多么痛苦的事情,需要点击很多checkbox,特别是在创建一个可以访问整个数据库实例里的所有数据库的时候(虽然我们提倡每个数据库的帐号和密码都不一样,更严格的要求可能需要设置同一个数据库下需要有不同权限的帐号进行管理)

如果我们对数据库的帐号进行有效管理的话,我们可以很轻松的完成这个任务,只需要一条SQL就能管理了。在这里我提倡一种安全、易维护的方案给大家:SQL Server数据库帐号密码安全设计

在看这篇文章之前,建议你先看看:SQL Server 2005控制用户权限访问表 

二、设计概要

我们首先要明白我们出现的问题是什么:

1.      我们厌烦了一个个去点击checkbox;

2.      点击那么多次checkbox,我们不能确保所有的点击都是正确的;

所以我们第一步要想的就是有没什么办法可以解决上面这些问题?上面的这些操作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(max)SET @user = 'UfranimdA_gz'SET @password = 'o23#25R@8a8A!@23#@%'
SET @sql = '
USE [master]
GO
CREATE LOGIN ['+ @user + '] WITH PASSWORD=N'''+ @password +''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
GO
EXEC master..sp_addsrvrolemember @loginame = N'''+@user+''', @rolename = N''sysadmin''
GO'PRINT(@sql)
DECLARE @itemCur CURSORSET @itemCur = CURSOR FOR 
    SELECT name from sys.databases where state =0
OPEN @itemCurFETCH NEXT FROM @itemCur INTO @dbnameWHILE @@FETCH_STATUS=0BEGIN
 
    SET @sql = '
USE ['+ @dbname + ']
GO
CREATE USER ['+@user+'] FOR LOGIN ['+@user+']
GO
USE ['+ @dbname + ']
GO
ALTER USER ['+@user+'] WITH DEFAULT_SCHEMA=[dbo]
GO
USE ['+ @dbname + ']
GO
EXEC sp_addrolemember N''db_owner'', N'''+@user+'''
GO'
    PRINT(@sql)
 
    FETCH NEXT FROM @itemCur INTO @dbnameEND 
CLOSE @itemCurDEALLOCATE @itemCur
--禁用sa帐号SET @sql = '
USE [master]
GO
ALTER LOGIN [sa] DISABLE
GO'PRINT(@sql)


 

四、生成的脚本代码


--创建数据库帐号密码USE 

[master]GOCREATE LOGIN [UfranimdA_gz] WITH PASSWORD=N'o23#25R@8a8A!@23#@%', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=ONGOEXEC master..sp_addsrvrolemember @loginame = N'UfranimdA_gz', @rolename = N'sysadmin'GO
USE [master]GOCREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]GOUSE [master]GOALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]GOUSE [master]GOEXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'GO
USE [tempdb]GOCREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]GOUSE [tempdb]GOALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]GOUSE [tempdb]GOEXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'GO
USE [model]GOCREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]GOUSE [model]GOALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]GOUSE [model]GOEXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'GO
USE [msdb]GOCREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]GOUSE [msdb]GOALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]GOUSE [msdb]GOEXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'GO
USE [DBA_DB]GOCREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]GOUSE [DBA_DB]GOALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]GOUSE [DBA_DB]GOEXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'GO
USE [TestDB]GOCREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]GOUSE [TestDB]GOALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]GOUSE [TestDB]GOEXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'GO
USE [master]GOALTER LOGIN [sa] DISABLEGO


 

五、特别说明

1.      这里生成的SQL脚本中包含了系统数据库:master、model、msdb、tempdb,为了方便我就没对这些数据库进行限制的,希望以后可以修正下这个脚本。

2.      这里再次推荐大家使用同一的数据库帐号密码的管理,无论是安全还是方便维护都是大有好处的。SQL Server数据库帐号密码安全设计,大家可以提些其它的想法。

本文由职坐标整理并发布,希望对同学们学习SQL Server有所帮助,更多内容请关注职坐标数据库SQL Server数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程