傳統做法在 config 明文儲存 sa 帳密,或僅靠內網隔離,一旦伺服器滲透即全盤洩露。本文提出一套「雙層加密 + 職責分離 + 集中管理」架構:應用程式不存帳密,透過 Web Service 雙層解密取得連線資訊;DBA 單機加密錄入,超級管理員與唯讀查詢帳號嚴格分離,實現帳密全生命週期零明文落地。

config 僅存唯一 Key (由 DBA 發布),呼叫 Web Service 取得加密連線字串。LinkConfig 視圖,取得 En_LinkIP、En_LinkSa、En_LinkPassWord (已加密),以 | 串聯後二次加密 (不同演算法) 回傳。
LinkConfig 表,生成唯一 LinkName (PK) 給開發人員。開發全程不知真實帳密。
CREATE TABLE [dbo].[LinkConfigTest](
[Id] INT IDENTITY(1,1) NOT NULL,
[LinkName] NVARCHAR(50) NOT NULL PRIMARY KEY, -- 唯一 Key
[LinkIP] VARCHAR(50) NULL, -- 明文 IP (僅超管可見)
[LinkSa] VARCHAR(50) NULL, -- 明文帳號
[LinkPassWord] VARCHAR(50) NULL, -- 明文密碼
[Description] NVARCHAR(100) NULL,
[State] INT NULL DEFAULT 0, -- 0 停用 / 1 啟用
[StateDescription] NVARCHAR(50) NULL,
[HostName] NVARCHAR(50) NULL,
[CreateTime] DATETIME NULL,
[En_LinkIP] VARCHAR(50) NULL, -- 加密 IP
[En_LinkSa] VARCHAR(50) NULL, -- 加密帳號
[En_LinkPassWord] VARCHAR(50) NULL -- 加密密碼
);
LinkIP 含埠號 (如 192.168.1.147,14339),避開 1433。INSERT/UPDATE/DELETE 權限,即使服務被攻破亦無法竄改帳密表。State=0 或刪除記錄,無需通知開發改配置。INSERT [LinkConfigTest] ([LinkName],[LinkIP],[LinkSa],[LinkPassWord],[Description],[State],[HostName],[CreateTime],[En_LinkIP],[En_LinkSa],[En_LinkPassWord])
VALUES
('sd9_DB1','192.168.1.147,14339','sd158admin','sd158admin+-987','內網_DB1',1,'SERVR9','2012-03-07 14:08:52',
'0xddf4a1c5a5dadc7374a9ca3ed3aa9f6b','0xe319cb7bedd3b0d400c3da3484c6a6e3','0xdc24223e94b4c4d754cfc40230680156'),
('sc13','192.168.1.25,13433','sc13admin','sc13adminasdfg','內網_DB1',1,'BAREOT-4','2012-03-07 14:08:52',
'0x0f3e6234263b544bbb7861fc3be9d4a9','0xe969c53b6c44990ac38a92f1c6ad2d97','0xac7663644f8de76a3da122257a6593ea');
此架構將「知情者」限縮至 DBA 與極少數超管,「持有者」限於編譯後 DLL 與加密資料表,網路傳輸全程密文,配合職責分離與狀態位緊急撤銷,構建了纵深防禦體系。雖非絕對不可破解,但大幅提升攻擊成本,符合資安分級保護實務需求。