西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)西西教程數(shù)據(jù)庫(kù)教程 → SQL Server數(shù)據(jù)庫(kù)帳號(hào)密碼安全設(shè)計(jì)、SQL數(shù)據(jù)庫(kù)帳號(hào)密碼生成

SQL Server數(shù)據(jù)庫(kù)帳號(hào)密碼安全設(shè)計(jì)、SQL數(shù)據(jù)庫(kù)帳號(hào)密碼生成

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:聽(tīng)風(fēng)吹雨時(shí)間:2012/3/23 22:50:40字體大。A-A+

作者:聽(tīng)風(fēng)吹雨點(diǎn)擊:73次評(píng)論:0次標(biāo)簽: SQLServer

  • 類(lèi)型:數(shù)據(jù)庫(kù)類(lèi)大小:40.7M語(yǔ)言:中文 評(píng)分:6.6
  • 標(biāo)簽:
立即下載

一、背景

在某天晚上凌晨1點(diǎn),我收到領(lǐng)導(dǎo)的通知:需要把我們所有的數(shù)據(jù)庫(kù)的密碼都需要進(jìn)行一次修改,原因是我們放到Web服務(wù)器的配置文件config中明文了我們的數(shù)據(jù)庫(kù)帳號(hào)和密碼,而且這份配置文件可能泄露了,更糟糕的是我們的數(shù)據(jù)庫(kù)是可以通過(guò)外網(wǎng)進(jìn)行訪問(wèn)的。雖然有端口進(jìn)行映射,但是我們的數(shù)據(jù)依然處在危險(xiǎn)的狀態(tài),所以這個(gè)時(shí)候DBA需要爭(zhēng)分奪秒修改數(shù)據(jù)庫(kù)的帳號(hào)密碼。

我們的數(shù)據(jù)庫(kù)服務(wù)器大概有30臺(tái),而且每臺(tái)機(jī)器上跑了很多個(gè)數(shù)據(jù)庫(kù)。有創(chuàng)建數(shù)據(jù)庫(kù)帳號(hào)經(jīng)驗(yàn)的同學(xué)你會(huì)發(fā)現(xiàn):使用SSMS進(jìn)行創(chuàng)建帳號(hào)密碼是件多么痛苦的事情,需要點(diǎn)擊很多checkbox,特別是在創(chuàng)建一個(gè)可以訪問(wèn)整個(gè)數(shù)據(jù)庫(kù)實(shí)例里的所有數(shù)據(jù)庫(kù)的時(shí)候(雖然我們提倡每個(gè)數(shù)據(jù)庫(kù)的帳號(hào)和密碼都不一樣,更嚴(yán)格的要求可能需要設(shè)置同一個(gè)數(shù)據(jù)庫(kù)下需要有不同權(quán)限的帳號(hào)進(jìn)行管理)

如果我們對(duì)數(shù)據(jù)庫(kù)的帳號(hào)進(jìn)行有效管理的話(huà),我們可以很輕松的完成這個(gè)任務(wù),只需要一條SQL就能管理了。在這里我提倡一種安全、易維護(hù)的方案給大家:SQL Server數(shù)據(jù)庫(kù)帳號(hào)密碼安全設(shè)計(jì)

二、設(shè)計(jì)概要

我們首先要明白我們出現(xiàn)的問(wèn)題是什么:

1.      我們厭煩了一個(gè)個(gè)去點(diǎn)擊checkbox;

2.      點(diǎn)擊那么多次checkbox,我們不能確保所有的點(diǎn)擊都是正確的;

所以我們第一步要想的就是有沒(méi)什么辦法可以解決上面這些問(wèn)題?上面的這些操作SSMS是能讓用戶(hù)把操作保存為腳本的,我們可以自己編寫(xiě)SQL腳本來(lái)完成類(lèi)似的工作。為了模擬SSMS上的操作,我們需要獲取到數(shù)據(jù)庫(kù)實(shí)例中所包含的所有數(shù)據(jù)庫(kù),再對(duì)每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建帳號(hào)和密碼。我們可以通過(guò)游標(biāo)的形式循環(huán)數(shù)據(jù)庫(kù),并創(chuàng)建帳號(hào)和密碼。最后我們需要禁用掉sa這個(gè)帳號(hào)。

修改下面【通用SQL模板】的@user和@password的值,拷貝到下面的代碼到SSMS中執(zhí)行,這樣就可以生成出適合本數(shù)據(jù)庫(kù)實(shí)例的SQL腳本【生成的腳本代碼】了,我們?cè)倏截惿傻腟QL代碼到SSMS中執(zhí)行就可以了。

執(zhí)行下面的兩個(gè)腳本不過(guò)秒級(jí),所以20臺(tái)服務(wù)器對(duì)你來(lái)說(shuō),簡(jiǎn)單啦。

三、通用SQL模板

--創(chuàng)建數(shù)據(jù)庫(kù)帳號(hào)

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 CURSOR

SET @itemCur = CURSOR FOR

    SELECT name from sys.databases where state =0

OPEN @itemCur

FETCH NEXT FROM @itemCur INTO @dbname

WHILE @@FETCH_STATUS=0

BEGIN

    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 @dbname

END

CLOSE @itemCur

DEALLOCATE @itemCur

--禁用sa帳號(hào)

SET @sql = '

USE [master]

GO

ALTER LOGIN [sa] DISABLE

GO'

PRINT(@sql)

四、生成的腳本代碼

--創(chuàng)建數(shù)據(jù)庫(kù)帳號(hào)密碼

USE [master]

GO

CREATE LOGIN [UfranimdA_gz] WITH PASSWORD=N'o23#25R@8a8A!@23#@%', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON

GO

EXEC master..sp_addsrvrolemember @loginame = N'UfranimdA_gz', @rolename = N'sysadmin'

GO

USE [master]

GO

CREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]

GO

USE [master]

GO

ALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]

GO

USE [master]

GO

EXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'

GO

USE [tempdb]

GO

CREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]

GO

USE [tempdb]

GO

ALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]

GO

USE [tempdb]

GO

EXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'

GO

USE [model]

GO

CREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]

GO

USE [model]

GO

ALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]

GO

USE [model]

GO

EXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'

GO

USE [msdb]

GO

CREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]

GO

USE [msdb]

GO

ALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]

GO

USE [msdb]

GO

EXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'

GO

USE [DBA_DB]

GO

CREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]

GO

USE [DBA_DB]

GO

ALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]

GO

USE [DBA_DB]

GO

EXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'

GO

USE [TestDB]

GO

CREATE USER [UfranimdA_gz] FOR LOGIN [UfranimdA_gz]

GO

USE [TestDB]

GO

ALTER USER [UfranimdA_gz] WITH DEFAULT_SCHEMA=[dbo]

GO

USE [TestDB]

GO

EXEC sp_addrolemember N'db_owner', N'UfranimdA_gz'

GO

USE [master]

GO

ALTER LOGIN [sa] DISABLE

GO

五、特別說(shuō)明

1.      這里生成的SQL腳本中包含了系統(tǒng)數(shù)據(jù)庫(kù):master、model、msdb、tempdb,為了方便我就沒(méi)對(duì)這些數(shù)據(jù)庫(kù)進(jìn)行限制的,希望以后可以修正下這個(gè)腳本。

2.      這里再次推薦大家使用同一的數(shù)據(jù)庫(kù)帳號(hào)密碼的管理,無(wú)論是安全還是方便維護(hù)都是大有好處的。SQL Server數(shù)據(jù)庫(kù)帳號(hào)密碼安全設(shè)計(jì),大家可以提些其它的想法。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)