- 應用程式帳號權限最小化
- 限制中繼資料的可見性
- 稽核軌跡
- 資料表(行)命名的考量
2012年9月1日 星期六
面對SQL Injection,DBA可以做甚麼呢!
難得公司請廠商做滲透測試,模擬駭客攻擊,我很好奇廠商會怎麼測試,所以同時間我也監控網站與資料庫的LOG,看看能從LOG裡讓我學到甚麼,當然最基本的SQL Injection與XSS一定會測試,身為DBA我當然最在意SQL Injection囉,而針對SQL Injection,我原本就做了以下前三項的設定
2012年7月24日 星期二
FN_TRACE_GETTABLE函數配上WHERE發生的怪事
最近在某台SQL 2005的機器上啟用Server Side Trace,打算自動分析Trace檔來稽核軌跡紀錄,因為FN_TRACE_GETTABLE函數本身可以以表格式格式傳回Trace檔的內容,我就偷懶直接拿來過濾欄位使用,沒有先匯入資料表後再過濾,結果發生同樣的指令有時候有回傳資料,有時候又沒有資料的情況
同樣讀取4個Trace檔案,假設共20萬筆紀錄,同樣的過濾條件,第一次得花2秒執行完,第二次以後只要花0.5秒就執行完了,第二次比第一次快是因為資料都載入記憶體,可以理解會加快速度,問題是第一次執行回傳16筆資料,第二次之後竟回傳0筆資料,我是見鬼了嗎?如下圖,我用Profiler錄製的內容,總共執行6次
2012年7月17日 星期二
無法使用指定的憑證進行解密或加密,可能是因為其中沒有私密金鑰,或是所提供的私密金鑰密碼不正確。
原本我有個預存程序使用憑證簽署過,後來為了加註說明文字得修改預存程序的內容,可是我僅僅只是加上備註而已,預存程序卻不能執行了,好像簽章失效了一般,後來我嘗試再簽署一次卻出現如標題之錯誤,經研究終於找到較佳的解決辦法,說明如下供各位參考,至於我為何會使用憑證簽署可參考如何用預存程序以最小權限原則呼叫遠端SSIS這篇
當你使用簽章簽署預存程序後,使用以下指令,可確認到所有已簽署簽章的模組資訊,此例預存程序為usp_Exectest1,憑證名稱為certTest
SELECT object_name(cp.major_id) '已簽署簽章的模組' ,
cp.crypt_property ,
cp.crypt_type ,
cp.crypt_type_desc ,
cer.name ,
cer.pvt_key_encryption_type
,
cer.pvt_key_encryption_type_desc
,
cer.subject ,
cer.expiry_date
FROM
sys.crypt_properties AS cp
right
outer JOIN sys.certificates AS cer
ON cp.thumbprint = cer.thumbprint
2012年7月12日 星期四
原來定序也會影響轉換函數啊!
CAST 和 CONVERT (Transact-SQL)裡面明明提到nvarchar可以轉varchar,但我不知為什中文字卻全轉成問號,後來再另外一台SQL Server上試,結果卻正常!
後來比較了兩邊差異,原來是定序不同造成的,以下寫了個簡單例子供各位參考(用Cast也可)
基本上,nvarchar轉varchar,英數字不會有問題,但中文裡若是有Unicode字元的會轉成?喔
至於我為什會需要將nvarchar轉varchar呢!因為在作SQL與DB2的轉換,DB2那邊都是varchar的囉!
後來比較了兩邊差異,原來是定序不同造成的,以下寫了個簡單例子供各位參考(用Cast也可)
declare @var nvarchar(32)
set @var = N'傳說中的6頭牛-牛牪犇'
select @var 'nvarchar',
convert(varchar(32),@var) COLLATE SQL_Latin1_General_CP1_CI_AS
'轉成varchar(Latin定序)',
convert(varchar(32),@var) COLLATE Chinese_Taiwan_Stroke_CI_AS
'轉成varchar(Chinese定序)'
基本上,nvarchar轉varchar,英數字不會有問題,但中文裡若是有Unicode字元的會轉成?喔
至於我為什會需要將nvarchar轉varchar呢!因為在作SQL與DB2的轉換,DB2那邊都是varchar的囉!
2012年7月7日 星期六
2012年7月5日 星期四
[SSIS]使用者'User_Name' 的登入失敗
原本設計的SSIS封裝可手動執行無誤,但是為了讓前端應用程式可呼叫該封裝,我用如何用預存程序以最小權限原則呼叫遠端SSIS的方式來做,結果我手動執行該作業卻出現如下錯誤:
以下列使用者的身分執行: srv001t\test。...32 位元版本 9.00.4035.00 Copyright (C) Microsoft Corp 1984-2005. All rights reserved.
已啟動: 上午 10:46:26
錯誤: 2012-07-05 10:46:30.89
代碼: 0xC0202009
來源: IS封裝測試 連接管理員 "SRV001_cm"
描述: SSIS 錯誤碼 DTS_E_OLEDBERROR。發生 OLE DB 錯誤。
錯誤碼: 0x80040E4D。 有 OLE DB 記錄可用。
來源: "Microsoft SQL Native Client"
Hresult: 0x80040E4D
描述: "使用者'SRV001T\test' 的登入失敗。"。 錯誤結束
錯誤: 2012-07-05 10:46:30.91
代碼: 0xC020801C
來源: 資料流程工作 OLE DB來源 [8263]
描述: SSIS 錯誤碼 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。對 "SRV001_cm" 連接管理員呼叫 AcquireConnection 方法失敗,錯誤碼為 0xC0202009。在此之前可能已公佈過錯誤訊息,說明 AcquireConnection 方法呼叫為何失敗的詳細資訊。 錯誤結束 ...
2012年7月2日 星期一
[SSIS]文字檔裡因換行字元不同所造成的錯誤
訂閱:
文章 (Atom)




