顯示具有 Log 標籤的文章。 顯示所有文章
顯示具有 Log 標籤的文章。 顯示所有文章

2025年12月2日 星期二

[研究]ASP.NET Webform 取得 Request Id 或 Response Id 儲存到的 Log Table ?

[研究]ASP.NET Webform 取得 Request Id 或 Response Id 儲存到的 Log Table ?

2025-12-02

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

✅ 一、WebForm 沒有內建 RequestId,需要自行產生

ASP.NET Core 才有內建 HttpContext.TraceIdentifier。

ASP.NET WebForm (.NET Framework) 沒有預設 RequestId,所以我們要 自行產生 GUID 或類似唯一值,並在整個 Request 生命周期保持一致。

最常見方式:

每一個 Request 進入 Pipeline 時產生 RequestId

儲存在 HttpContext.Items 中(僅在該 Request 有效)

Log 時從 HttpContext.Items 取得

✅ 二、在 Global.asax 產生 RequestId(推薦做法)

Global.asax

protected void Application_BeginRequest(object sender, EventArgs e)
{
    string requestId = Guid.NewGuid().ToString();
    HttpContext.Current.Items["RequestId"] = requestId;
}

✅ 三、在任何 .aspx.cs 取得 RequestId

Page_Load / Button_Click / 任何地方

string requestId = HttpContext.Current.Items["RequestId"]?.ToString();

、、、(略)

**********

其實說穿了,ChatGPT 只是讓 table 中每一筆資料有一個唯一的值而已,用 SQL Server 的 識別 IDENTITY(1,1) 即可。而 Request Id 和 Response Id 其實用同一個欄位即可。


(完)


2025年11月22日 星期六

[研究]ASP.NET WebForm + SQL Server 2019 網站的Log資料表推薦?

[研究]ASP.NET WebForm + SQL Server 2019 網站的AP Log資料表推薦?

2025-11-22

突然想到,問問看 ChatGPT 的 APLog 建議。

開發一個 ASP.NET WebForm + SQL Server 2019 網站,請推薦 DB 中 Log table 有哪欄位,欄位型態(含長度、是否預設值、預設值、是否允許 NULL、、、) 分別是是甚麼 ? 表格呈現 ?

ChatGPT

✅ 一、Log Table 欄位建議(最推薦版本)

欄位名稱 型態 長度 NULL? 預設值 說明
LogID BIGINT — NOT NULL IDENTITY(1,1) Primary Key,自動遞增
LogTime datetime2(3) — NOT NULL SYSDATETIME() 建議記到毫秒(.000~.999)
Level varchar(20) 20 NOT NULL 'INFO' Log 等級,例如 INFO / WARN / ERROR
UserID varchar(50) 50 NULL NULL 來源使用者代號(可 NULL)
ClientIP varchar(45) 45 NULL NULL IPv4/IPv6 都可記錄
PageName varchar(200) 200 NULL NULL 記錄 ASPX 頁面(或 API 名稱)
Action varchar(200) 200 NULL NULL 使用者動作、事件名
Message nvarchar(max) — NULL NULL 主訊息、簡述
Detail nvarchar(max) — NULL NULL 完整訊息(如 Exception.ToString)
MachineName varchar(100) 100 NOT NULL HOST_NAME() 伺服器名稱
AppName varchar(50) 50 NOT NULL 'WebFormSite' 系統識別名(可改)
TraceID varchar(50) 50 NULL NULL 用於跨 API、跨系統追蹤

✔ 為何選用 datetime2(3)?

datetime2(3)

  • 精度:毫秒(需要 Web Log 精度通常到此即可)
  • 容量:7 bytes
  • 預設值可用:SYSDATETIME()(datetime2 版)
  • 最新 SQL Server 推薦使用 datetime2 取代 datetime

✔ 為何 Level、PageName、Action 建議 varchar?

因為:

  • WebForm 系統場景中無需 Unicode
  • varchar 資料更小、更省 index 空間
  • 查詢效能比 nvarchar 好
  • Message、Detail 則可能含中文與 Exception,所以使用 nvarchar(max)。

✔ 有沒有必要建立索引?

建議以下 Index:

  • LogTime(降序)
  • Level + LogTime
  • UserID + LogTime
  • TraceID(若跨系統必須)

✅ 二、SQL 建議 DDL


CREATE TABLE dbo.Logs
(
    LogID       BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    LogTime     datetime2(3) NOT NULL DEFAULT SYSDATETIME(),
    Level       varchar(20) NOT NULL DEFAULT ('INFO'),
    UserID      varchar(50) NULL,
    ClientIP    varchar(45) NULL,
    PageName    varchar(200) NULL,
    Action      varchar(200) NULL,
    Message     nvarchar(max) NULL,
    Detail      nvarchar(max) NULL,
    MachineName varchar(100) NOT NULL DEFAULT HOST_NAME(),
    AppName     varchar(50) NOT NULL DEFAULT ('WebFormSite'),
    TraceID     varchar(50) NULL
);

▶ 三、在 ASP.NET WebForm GridView 的呈現建議

GridView 最常顯示欄位:

顯示 不顯示(或隱藏)
LogTime LogID
Level MachineName
UserID AppName
ClientIP TraceID
PageName Detail(按按鈕展開)
Action
Message

✔ GridView 最佳呈現(程式碼示例)

.aspx


            
<asp:GridView ID="gvLog" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField DataField="LogTime" HeaderText="時間" 
            DataFormatString="{0:yyyy-MM-dd HH:mm:ss.fff}" />
        <asp:BoundField DataField="Level" HeaderText="層級" />
        <asp:BoundField DataField="UserID" HeaderText="使用者" />
        <asp:BoundField DataField="ClientIP" HeaderText="IP" />
        <asp:BoundField DataField="PageName" HeaderText="頁面" />
        <asp:BoundField DataField="Action" HeaderText="動作" />
        <asp:BoundField DataField="Message" HeaderText="訊息" />

        <!-- Detail 隱藏,改成按鈕彈出 -->
        <asp:TemplateField HeaderText="詳細">
            <ItemTemplate>
                <asp:Button runat="server" Text="查看" 
                    CommandName="ViewDetail"
                    CommandArgument='<%# Eval("LogID") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

📌 四、如果需要寫入程式碼(C# 範例)

Default.aspx


            
public static void WriteLog(string level, string user, string page, string action, string msg, string detail)
{
    using (SqlConnection conn = new SqlConnection(connStr))
    using (SqlCommand cmd = new SqlCommand(@"
        INSERT INTO Logs (Level, UserID, PageName, Action, Message, Detail, ClientIP)
        VALUES (@Level, @UserID, @PageName, @Action, @Message, @Detail, @IP)
    ", conn))
    {
        cmd.Parameters.AddWithValue("@Level", level);
        cmd.Parameters.AddWithValue("@UserID", (object)user ?? DBNull.Value);
        cmd.Parameters.AddWithValue("@PageName", page);
        cmd.Parameters.AddWithValue("@Action", action);
        cmd.Parameters.AddWithValue("@Message", msg);
        cmd.Parameters.AddWithValue("@Detail", (object)detail ?? DBNull.Value);
        cmd.Parameters.AddWithValue("@IP", HttpContext.Current.Request.UserHostAddress);

        conn.Open();
        cmd.ExecuteNonQuery();
    }
}

********************************************************************************

這是 ASP.NET WebForm 繁體中文網站,為何是否允許NULL 建議用 NULL ? 某些 "預設值" 建議用 NULL,而不是 N'' 空字串 ? 型態建議用 varchar,而不是 nvarchar ?

ChatGPT

✅ 為何 大部分欄位建議允許 NULL?

✔ 1. Log 本質是「紀錄事件」,不是所有欄位每次都會有資料

👉 因此 強迫 NOT NULL + 空字串 會讓資料:難以判斷「真的沒有」 vs. 「空字串」

✔ 2. 空字串與 NULL 的語意完全不同

狀態 意義

NULL 這項資料「不存在」

''(空字串) 這項資料存在,只是內容是空

📌 Log 中最重要的是正確語意,因此推薦:

狀態 意義
NULL 這項資料「不存在」
''(空字串) 這項資料存在,只是內容是空

❌ 若全部欄位 NOT NULL + 空字串,會變成問題

例如你要查「沒有 UserID 的 Log」:

你必須用:

WHERE UserID IS NULL OR UserID = ''

這會變得很亂,也容易寫錯。

🟦 結論

在 Log Table 中,多數欄位允許 NULL 才是真正國際慣例,也符合語意正確性。

✅ 為何某些欄位「預設值」建議用 NULL,而不是 N'' 空字串?

✔ 1. 預設值 NULL 表示「沒有提供」

例如呼叫 Log 方法時沒有傳 Action,你希望 DB 記錄「無動作」,不是「空白動作」。

✔ 2. 空字串會破壞查詢語意

空字串實際上是一個「值」,但它不代表不存在。

✔ 3. 節省儲存空間

NULL 在 SQL Server 的儲存是 比空字串更省空間的,因為儲存格式不同。

✔ 4. 避免 Query Index 汙染

使用空字串會造成 B-Tree index 多一個不必要的 entry。

✔ 為何欄位型態建議用 varchar 而不是 nvarchar?

即使你的網站是 繁體中文網站,仍然有三個核心原因:

🎯 核心原因 1:Log 中大部分欄位是英文,不需 Unicode。

🎯 核心原因 2:varchar 效能與空間比 nvarchar 更好

在 SQL Server 中:

varchar 為 1 byte / 字元

nvarchar 為 2 bytes / 字元

Log 可能幾百萬筆,差異大:

型態 儲存空間 意義
varchar(50) 50 bytes 較小、較快
nvarchar(50) 100 bytes 大 2 倍,index 也大 2 倍

Log table 通常很大,使用 varchar 可節省大量空間並提升查詢速度。

🎯 核心原因 3:繁體中文只會出現在 Message / Detail

這兩個欄位我已建議用:

nvarchar(max)

nvarchar(max)

這些欄位確實會包含中文、例外訊息、堆疊資訊。

但其他用來辨識頁面、欄位、行為的欄位多為英文,varchar 完全足夠。

********************************************************************************

查詢條件,TextBox1 為完全比對,空白時查全部;TextBox2 為完全比對,空白時查全部,否則使用 LIKE,code 盡量不寫 aspx.cs 中,寫在 .aspx 中就好

.aspx

<asp:TextBox ID="TextBox1" runat="server" />
<asp:TextBox ID="TextBox2" runat="server" />
<asp:Button ID="btnSearch" runat="server" Text="查詢" />

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:MyConn %>"
    SelectCommand="
        SELECT *
        FROM LogTable
        WHERE
            -- TextBox1:空白查全部,有值則完全比對
            (@p1 = '' OR Column1 = @p1)

            AND

            -- TextBox2:空白查全部,有值則 LIKE 模糊比對
            (@p2 = '' OR ISNULL(Column2, '') LIKE @like_p2)
    ">
    <SelectParameters>
        <asp:ControlParameter Name="p1" ControlID="TextBox1" PropertyName="Text" />
        <asp:ControlParameter Name="p2" ControlID="TextBox2" PropertyName="Text" />

        <!-- 給 TextBox2 做 LIKE 用 -->
        <asp:ControlParameter Name="like_p2"
            ControlID="TextBox2"
            PropertyName="Text"
            ConvertEmptyStringToNull="false"
            DefaultValue="" />
    </SelectParameters>

    <!-- 調整參數:在 Selecting 事件中加入 '%'(無需寫 aspx.cs!) -->
    <SelectParameters>
    </SelectParameters>
</asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" />

.aspx

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
    OnSelecting="SqlDataSource1_Selecting"
    ...
>
 

.aspx

<script runat="server">
    protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        string p2 = (string)e.Command.Parameters["@p2"].Value;

        // TextBox2 空白:查全部 → LIKE 條件會被 (@p2 = '') 篩掉
        if (string.IsNullOrEmpty(p2))
        {
            e.Command.Parameters["@like_p2"].Value = "";
        }
        else
        {
            // LIKE '%keyword%'
            e.Command.Parameters["@like_p2"].Value = "%" + p2 + "%";
        }
    }
</script>

(完)

2025年3月31日 星期一

[研究]SQL Server 2019如何禁止sa或sysadmin群組中帳號遠端存取資料庫

[研究]SQL Server 2019如何禁止sa或sysadmin群組中帳號遠端存取資料庫

2025-03-31

限制 sa 帳戶的存取權限

連線到 SQL Server Management Studio (SSMS)

執行下列 SQL 語句來停用 sa 帳戶:

ALTER LOGIN sa DISABLE;   

若仍需使用 sa,但只限本機存取,可以變更 sa 密碼並強制使用 Windows 身分驗證。

**********

建立登入觸發器 (Logon Trigger) 限制遠端 sysadmin 登入

建立觸發器來限制 sa 帳號若不是從某電腦登入,拒絕:

CREATE TRIGGER BlockRemoteSysadminLogin
ON ALL SERVER
FOR LOGON
AS
BEGIN
    IF ORIGINAL_LOGIN() IN ('sa') AND HOST_NAME() NOT IN ('本機電腦名稱')
    BEGIN
        ROLLBACK;
    END
END;


註:主機名稱請在 SSMS 用 SELECT HOST_NAME() 取得,而非用「命令提示字元」(cmd.exe) 用 hostname 指令取得,有可能不同。

建立觸發器來限制 sysadmin 群組若不是從某電腦登入,拒絕:

CREATE TRIGGER BlockRemoteSysadminLogin
ON ALL SERVER
FOR LOGON
AS
BEGIN
    IF IS_SRVROLEMEMBER('sysadmin', ORIGINAL_LOGIN()) = 1 
       AND HOST_NAME() NOT IN ('本機電腦名稱')
    BEGIN
        ROLLBACK;
    END
END;








注意,本機電腦名稱要用 hostname 的結果,不可用句點 (.) 代替,否則之後會完全不能進去



設定完成後,sysadmin 只能從本機登入。

********************************************************************************

【若不小心 "本機電腦名稱" 設定為 "." 】

T-SQL 的 "本機電腦名稱" 若設定為 "." 後,會被立刻強制登出 SSMS,無法再下任何 T-SQL 指令,如何解決。

使用 SQL Server 單人模式 (Single-User Mode)

C:\>net stop MSSQLSERVER
SQL Server (MSSQLSERVER) 服務正在停止.
SQL Server (MSSQLSERVER) 服務已經成功停止。
C:\>net start MSSQLSERVER /m
SQL Server (MSSQLSERVER) 服務正在啟動 .
SQL Server (MSSQLSERVER) 服務已經啟動成功。

C:\>sqlcmd -S localhost -E
1> DROP TRIGGER BlockRemoteSysadminLogin ON ALL SERVER;
2> GO
1> exit

C:\>net stop MSSQLSERVER
SQL Server (MSSQLSERVER) 服務正在停止.
SQL Server (MSSQLSERVER) 服務已經成功停止。

C:\>net start MSSQLSERVER
SQL Server (MSSQLSERVER) 服務正在啟動 .
SQL Server (MSSQLSERVER) 服務已經啟動成功。

C:\>

上面敝人實際測試過可行。

(完)


2025年3月28日 星期五

[研究]SQL Server 2019 如何查詢資料庫帳號變更稽核?

[研究]SQL Server 2019 如何查詢資料庫帳號變更稽核?

2025-03-27

SQL Server 2019 如何查詢資料庫帳號變更稽核?

ChatGPT 說:

在 SQL Server 2019 中,可以使用 SQL Server Audit 或 Default Trace 來查詢資料庫帳號變更的稽核記錄,以下是幾種方法:

********************************************************************************

2025-04-02 補

註:ChatGPT 說在 SQL Server 中,「伺服器稽核(Server Audit)」功能只有在 Enterprise 版和特定的高階版本(如 Datacenter 或 Developer)才可用,而 Standard 版及更低版本(如 Express)不支援 這個功能。敝人實際測試並非如此。根據下面網址,至少 SQL Server 2016 有 ,但沒提到要 Enterprise 才支援

https://learn.microsoft.com/zh-tw/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions?view=sql-server-2016

3.2. SQL Server Audit Support in Different Editions and Versions
https://logbinder.helpspot.com/index.php?pg=kb.page&id=79 
根據這篇,有更詳細說明

Edition \ VersionSQL Server 2008 and 2008 R2SQL Server 2012 and 2014SQL Server 2016* and 2017
EnterpriseServer- and database-levelServer- and database-levelServer- and database-level
DeveloperServer- and database-levelServer- and database-levelServer- and database-level
DatacenterServer- and database-levelN/AN/A
Business IntelligenceNoneServer-levelN/A
StandardNoneServer-levelServer- and database-level*
WebNoneServer-levelServer- and database-level*
ExpressNoneServer-levelServer- and database-level*

* Database-level auditing for Standard, Web and Express editions are available starting SQL Server 2016 SP1.

********************************************************************************

方法 1:使用 SQL Server Audit(推薦方式)

SQL Server Audit 提供較完整的稽核功能,可以記錄 登入帳號新增、刪除、變更密碼、授權變更 等操作。

1. 建立 Server Audit(伺服器級稽核)

首先,建立稽核物件,將稽核記錄存放於檔案中:

請先手動建立C:\AuditLogs\ 目錄

下圖。ChatGPT 原本給的指令如下,就算是 SQL Server 2019 Enterprise 也無法執行成功

CREATE SERVER AUDIT LoginAudit
TO FILE (FILEPATH = 'C:\SQLAudit\', MAXSIZE = 10MB, ROLLOVER = ON);
ALTER SERVER AUDIT LoginAudit WITH (STATE = ON);


敝人後來改成下面

CREATE SERVER AUDIT Audit_LoginChanges
TO FILE ( FILEPATH = 'C:\AuditLogs\', MAXSIZE = 10MB)  
WITH ( QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE );


(下圖)ChatGPT 說 SQL Server Audit 要 Enterprise 版才支援,但敝人實際測試下面指令 SQL Server 2019 Standard 也可以正常執行


2. 建立 Server Audit Specification(伺服器層級稽核規格)

設定要稽核的事件:

CREATE SERVER AUDIT SPECIFICATION Audit_Login_Changes_Spec
FOR SERVER AUDIT Audit_LoginChanges
ADD (SERVER_PRINCIPAL_CHANGE_GROUP)
WITH (STATE = ON);


(下圖)SQL Server 2019 Enterprise 和SQL Server 2019 Standard 都可以執行

其中 SERVER_PRINCIPAL_CHANGE_GROUP 會記錄登入帳號變更(如 CREATE LOGIN、ALTER LOGIN、DROP LOGIN 等)。

3. 啟動 Audit

ALTER SERVER AUDIT Audit_LoginChanges WITH (STATE = ON);  


(下圖)SQL Server 2019 Enterprise 和SQL Server 2019 Standard 都可以執行

4. 查詢 Audit 記錄

當帳號變更後,可以用以下 SQL 查詢:

SELECT event_time, action_id, succeeded, session_server_principal_name, server_principal_name, statement
FROM sys.fn_get_audit_file('C:\AuditLogs\*.sqlaudit', DEFAULT, DEFAULT)
ORDER BY event_time DESC;


(下圖)SQL Server 2019 Enterprise 和SQL Server 2019 Standard 都可以執行

其中

  •  event_time:事件時間
  •  action_id:動作類型(如 LGCR 表示 CREATE LOGIN,LGMD 表示 ALTER LOGIN)
  •  succeeded:是否成功(1 = 成功,0 = 失敗)
  •  session_server_principal_name:執行變更的帳號
  •  server_principal_name:被變更的帳號
  •  statement:執行的 SQL 指令

5. 刪除建立的東西

--步驟 1:停用 SERVER AUDIT SPECIFICATION
ALTER SERVER AUDIT SPECIFICATION Audit_Login_Changes_Spec WITH (STATE = OFF);

--步驟 2:刪除 SERVER AUDIT SPECIFICATION
DROP SERVER AUDIT SPECIFICATION Audit_Login_Changes_Spec;

--步驟 3:停用 SERVER AUDIT
ALTER SERVER AUDIT Audit_LoginChanges WITH (STATE = OFF);

--步驟 4:刪除 SERVER AUDIT
DROP SERVER AUDIT Audit_LoginChanges;


********************************************************************************

方法 2:使用 Default Trace(預設追蹤)

SQL Server 預設啟用了 Default Trace,可以用來查詢帳號變更。

查詢 Default Trace

SELECT 
    te.name AS EventName,
    t.DatabaseName,
    t.StartTime,
    t.ObjectName,
    t.ObjectType,
    t.EventClass,
    t.EventSubClass,
    t.TextData
FROM sys.fn_trace_gettable(
    (SELECT REVERSE(SUBSTRING(REVERSE(path), CHARINDEX('\', REVERSE(path)), LEN(path))) + 'log.trc' 
     FROM sys.traces WHERE is_default = 1), DEFAULT) t
JOIN sys.trace_events te ON t.EventClass = te.trace_event_id
WHERE t.EventClass IN (104, 105, 108) -- 104: Create Login, 105: Drop Login, 108: Alter Login
ORDER BY t.StartTime DESC;

其中

  • 104(Create Login):建立登入帳號
  • 105(Drop Login):刪除登入帳號
  • 108(Alter Login):修改登入帳號
  •  Default Trace 只保留短期記錄,如果需要長期記錄,建議使用 SQL Server Audit。

(下圖) 新增一個帳號後測試


********************************************************************************

方法 3:查詢 SQL Server Error Log(部分變更可查)

部分帳號變更(如 CREATE LOGIN 或 ALTER LOGIN)會記錄到 SQL Server Error Log。

請參考

[研究]SQL Server 2019 資料庫帳號登出登入稽核?
https://shaurong.blogspot.com/2025/03/sql-server-2019.html

這方法適用於 SQL Server 已啟用 LOGIN_CHANGE_PASSWORD 記錄的情況,但不如 SQL Server Audit 詳細。

********************************************************************************

總結

方法優點缺點
SQL Server Audit(推薦)最完整,支援長期記錄,可用 GUI 或 SQL 查詢需設定 Audit
Default Trace內建功能,不需額外設定只能查詢最近變更
SQL Server Error Log不需設定,適用於密碼變更查詢記錄不完整

如需完整監控帳號變更,建議使用 SQL Server Audit,可確保 符合稽核規範(如 GDPR、ISO 27001),並能長期儲存記錄。

(完)




2024年11月29日 星期五

[研究]資安相關產品有哪幾類?

[研究]資安相關產品有哪幾類?

2024-11-29

請問資安相關產品有哪幾類 ? EDR ? DLP ? APT ? SIEM ? 資訊資產管理 ? Log 收集 ? 還有甚麼 ?

ChatGPT 說:

資安相關產品範疇廣泛,針對不同威脅與需求有許多分類。以下列出常見的資安產品類型,並概述其功能與應用場景:

主要資安產品類型

1. EDR(Endpoint Detection and Response,終端檢測與回應)

  • 功能:針對終端(如電腦、伺服器)進行威脅檢測、分析和回應。
  • 應用場景:即時攔截勒索病毒、惡意程式或可疑行為。
  • 示例:CrowdStrike Falcon、SentinelOne、Microsoft Defender for Endpoint。

2. DLP(Data Loss Prevention,資料外洩防護)

  • 功能:防止未經授權的敏感資料外洩(如通過電子郵件或雲端儲存)。
  • 應用場景:保障商業機密或個資(PII)安全。
  • 示例:Symantec DLP、Forcepoint DLP、McAfee Total Protection for DLP。

3. APT 防禦(Advanced Persistent Threat,進階持續性威脅)

  • 功能:針對高度隱秘且長期的攻擊提供多層次防禦(如沙盒分析與行為偵測)。
  • 應用場景:保護企業免受高階駭客組織的滲透攻擊。
  • 示例:FireEye NX、FortiSandbox、Palo Alto WildFire。

4. SIEM(Security Information and Event Management,安全資訊與事件管理)

  • 功能:集中收集並分析各系統的日誌資料,識別潛在威脅並生成警報。
  • 應用場景:跨部門監控大型企業的安全事件。
  • 示例:Splunk Enterprise Security、IBM QRadar、ArcSight ESM。

5. 資訊資產管理(IT Asset Management,ITAM)

  • 功能:管理硬件與軟件資產清單,追蹤資產的使用情況與合規性。
  • 應用場景:企業 IT 資產盤點與軟件授權合規性檢查。
  • 示例:ManageEngine AssetExplorer、神網 WM7Lite、Lansweeper。

6. Log 收集與分析

  • 功能:集中管理並分析來自多種來源的日誌資料,用於故障排除與威脅檢測。
  • 應用場景:追蹤異常事件或調查安全事故。
  • 示例:Elastic Stack (ELK)、Graylog、Fluentd。

其他重要資安產品類型

7. 防火牆(Firewall)

  • 功能:監控與控制進出網絡的流量,根據規則阻擋未授權流量。
  • 應用場景:保護企業網絡邊界。
  • 示例:Palo Alto Networks Firewall、Fortinet FortiGate、Check Point NGFW。

8. 入侵檢測與防禦(IDS/IPS)

  • 功能:識別並阻止網絡中的惡意流量或異常行為。
  • 應用場景:監控內網流量並即時防禦威脅。
  • 示例:Snort (IDS)、Suricata、Cisco Firepower。

9. 身份與存取管理(IAM,Identity and Access Management)

  • 功能:確保正確的用戶身份驗證與權限控制。
  • 應用場景:管理用戶登入和應用存取。
  • 示例:Okta、Azure AD、ForgeRock。

10. 零信任架構(Zero Trust Architecture)

  • 功能:實施細粒度的存取控制,所有存取都需驗證和授權。
  • 應用場景:保護分布式工作環境中的資源。
  • 示例:Zscaler Zero Trust Exchange、Palo Alto Prisma Access。

11. 安全郵件閘道(Email Security Gateway)

  • 功能:過濾垃圾郵件、惡意附件和釣魚郵件。
  • 應用場景:防範針對電子郵件的攻擊。
  • 示例:Proofpoint Email Protection、Barracuda Email Security。

12. 沙盒分析(Sandbox Analysis)

  • 功能:在隔離環境中執行可疑文件或程式,分析其行為是否惡意。
  • 應用場景:檢測未知威脅。
  • 示例:FireEye MVX、VMware NSX Sandbox。

13. 威脅情報(Threat Intelligence)

  • 功能:收集與分析全球威脅情報,提供預警和防禦指引。
  • 應用場景:提早應對新興威脅。
  • 示例:Recorded Future、IBM X-Force Exchange。

14. 安全行為分析(UEBA,User and Entity Behavior Analytics)

  • 功能:透過分析用戶與實體行為,識別潛在異常活動。
  • 應用場景:內部威脅偵測。
  • 示例:Splunk UEBA、Securonix。

結論

資安產品分為多個大類,彼此互補,構成全面的防禦體系。關鍵分類如下:

  • 端點防護:EDR、DLP。
  • 網絡防護:防火牆、IDS/IPS。
  • 威脅管理:SIEM、APT 防禦、UEBA。
  • 資產與身份管理:ITAM、IAM、零信任。
  • 威脅情報與分析:沙盒分析、威脅情報。

建議根據需求與環境特性選擇合適的產品。需要更詳細的建議可提供使用場景進一步分析!

(完)

2022年9月5日 星期一

[研究]ASP.NET 奇怪的網址 Log - DBMS_PIPE.RECEIVE_MESSAGE

[研究]ASP.NET 奇怪的網址 Log - DBMS_PIPE.RECEIVE_MESSAGE

2022-09-05

/不含.aspx的網址'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'.aspx

**********

Google 查了一下

https://docs.oracle.com/database/121/ARPLS/d_pipe.htm#ARPLS67400

DBMS_PIPE 是 Oracle Database 的 PL/SQL 使用的,RECEIVE_MESSAGE 是它的指令。

(系統最近在做定期的弱點掃描)

(完)

2022年4月14日 星期四

[研究] SQL Server 資料庫 的交易紀錄已滿,因為發生 'LOG_BACKUP'。

[研究] SQL Server 資料庫 的交易紀錄已滿,因為發生 'LOG_BACKUP'。

[研究]縮小 SQL Server Database Transaction Log File 資料庫交易記錄檔 (.ldf) 大小

2022-04-14

環境:SQL Server 2019 Standard

最近連上某系統,發現無法登入;因為客製化的遠端錯誤訊息不足,所以直接登入連上該主機,在該伺服器主機上再測試一次,訊息顯示資料庫的交易紀錄已滿。


檢查存放資料庫檔案的 D:\,發現已經爆滿了,刪除部分其他檔案後,系統正常運作了。

********************************************************************************

DBCC SHRINKFILE (Transact-SQL) - SQL Server | Microsoft Docs
https://docs.microsoft.com/zh-tw/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql?view=sql-server-ver15

在 SQL Server Management Studio ( SSMS ) 上執行


use TestDB;
GO

ALTER DATABASE TestDB SET RECOVERY SIMPLE;
GO

DBCC SHRINKFILE (TestDB_Log, 1);
GO

ALTER DATABASE TestDB SET RECOVERY FULL;
GO



********************************************************************************
用圖形介面加上命令操作 
(其實不會比上面方便)







********************************************************************************
變更預設 .ldf 檔案大小限制

預設約 2TB,但若磁碟分割沒有那麼大,或希望它不會超過多大,可以設定一下。


********************************************************************************

2024-01-26 補
請問為何發生 "資料庫 MyDB 的交易記錄已滿,因為發生 'LOG_BACKUP'。" ?

ChatGPT
這個錯誤訊息表示資料庫(MyDB)的交易日誌(log)已滿,這通常是由於交易日誌沒有進行備份 (LOG_BACKUP) 而導致的。

在SQL Server或其他資料庫管理系統中,交易日誌是用來記錄數據庫的所有變更的地方。當交易日誌檔案的大小達到其最大限制時,資料庫引擎就會停止對資料庫進行修改,除非進行交易日誌備份以釋放空間。

要解決這個問題,你可以執行交易日誌備份操作。這可以通過使用SQL Server Management Studio (SSMS) 或 Transact-SQL 語句進行。以下是一個使用 T-SQL 的簡單範例:

BACKUP LOG MyDB TO DISK = 'C:\Path\To\Backup\MyDB_LogBackup.bak';

請注意,這只是一個簡單的範例,實際情況可能需要根據你的環境和需求進行調整。請確保在執行備份操作之前仔細檢查和測試。

另外,也建議設定定期的交易日誌備份作業,以確保日誌文件不會再次達到最大限制。這可以透過定期執行類似的備份操作來實現。

**********

訊息 4208,層級 16,狀態 1,行 1
當復原模式為 SIMPLE 時,不允許使用陳述式 BACKUP LOG。請使用 BACKUP DATABASE 或使用 ALTER DATABASE 來變更復原模式。
訊息 3013,層級 16,狀態 1,行 1
BACKUP LOG 正在異常結束。

ChatGPT
這個錯誤訊息表明在資料庫的復原模式為 "SIMPLE" 時,是不允許使用陳述式 BACKUP LOG 的。在 "SIMPLE" 復原模式下,SQL Server自動處理交易日誌,並且不允許手動執行交易日誌備份。

如果你的資料庫在 "SIMPLE" 復原模式下,你不需要手動執行交易日誌備份。系統會自動管理交易日誌的截斷(截斷不再需要的部分),而不需要額外的操作。這種模式通常用於小型資料庫或不需要複雜還原的應用程序。

如果你確實需要執行交易日誌備份,你可能需要將資料庫的復原模式更改為 "FULL" 或 "BULK-LOGGED"。這可以使用 ALTER DATABASE 來實現,例如:

ALTER DATABASE MyDB SET RECOVERY FULL;

請注意,在 "FULL" 或 "BULK-LOGGED" 復原模式下,你可以使用 BACKUP LOG 進行交易日誌備份,但同時也需要定期進行交易日誌備份和日誌檔案的備份,以防止日誌檔案變得過大。

**********
訊息 4214,層級 16,狀態 1,行 2
無法執行 BACKUP LOG,因為沒有目前的資料庫備份。
訊息 3013,層級 16,狀態 1,行 2
BACKUP LOG 正在異常結束。

ChatGPT
這個錯誤訊息表明在嘗試執行 BACKUP LOG 操作時,系統發現沒有目前的資料庫備份。在 SQL Server 中,通常在執行交易日誌備份之前,需要先執行完整資料庫備份(FULL DATABASE BACKUP)。這是為了確保在還原操作中有完整的起點,可以使用完整備份的檔案還原到某個時間點。

以下是一個可能的步驟:

執行完整資料庫備份:

BACKUP DATABASE MyDB TO DISK = 'C:\Path\To\Backup\MyDB_FullBackup.bak';

執行交易日誌備份:
在執行 BACKUP LOG 之前,確保先執行了完整資料庫備份。

BACKUP LOG MyDB TO DISK = 'C:\Path\To\Backup\MyDB_LogBackup.bak';

請注意,這只是一個簡單的範例,實際情況可能需要根據你的環境和需求進行調整。確保在執行備份操作之前,了解你的系統的備份策略和需求。

如果你確定已經執行了完整資料庫備份,但仍然遇到這個錯誤,可能需要檢查備份文件的路徑是否正確,以及是否有足夠的權限進行備份操作。

最後成功的指令


ALTER DATABASE MyDB SET RECOVERY FULL;
BACKUP DATABASE MyDB TO DISK = 'C:\Temp\MyDB_FullBackup.bak';
BACKUP LOG MyDB TO DISK = 'C:\Temp\MyDB_LogBackup.bak';
ALTER DATABASE MyDB SET RECOVERY SIMPLE;



********************************************************************************

(完)

相關

[研究] SQL Server 資料庫 的交易紀錄已滿,因為發生 'LOG_BACKUP'。

[研究] 資料庫 'xxx' 的交易記錄已滿,因為發生 'LOG_BACKUP'。

[研究] SQL Server 2016 刪除 .ldf 檔案

[研究]檢視 SQL Server Database Transaction Log File 資料庫交易記錄檔 (.ldf) 內容

[研究][ASP.NET]Elmah寄信通知「資料庫...的交易記錄已滿,因為發生 'LOG_BACKUP'」https://shaurong.blogspot.com/2022/04/aspnetelmah-logbackup.html

[研究]檢視 SQL Server Database Transaction Log File 資料庫交易記錄檔 (.ldf) 內容https://shaurong.blogspot.com/2022/04/sql-server-database-transaction-log.html

[研究]縮小 SQL Server Database Transaction Log File 資料庫交易記錄檔 (.ldf) 大小https://shaurong.blogspot.com/2022/04/sql-server-database-transaction-log_14.html


2021年6月24日 星期四

[研究]資通系統防護基準-保留日誌至少六個月

[研究]資通系統防護基準-保留日誌至少六個月

2021-06-24

資通安全責任等級分級辦法(110-08-23版)
https://law.moj.gov.tw/LawClass/LawAll.aspx?pcode=A0030304
附表十++資通系統防護基準.PDF
構面:事件日誌與可歸責性
措施內容:記錄事件
控制措施:一、訂定日誌之記錄時間週期及留存政策,並保留日誌至少六個月。

********************************************************************************

Windows Event Log

好像沒有直接設定保留多久的方法,只能改「事件檢視器」的「最大記錄檔大小」。




********************************************************************************

Windows 2016、2019、2022 IIS 10.0 - IIS Log

預設沒有大小限制、天數限制,直到硬碟空間用盡。




********************************************************************************

(完)

2020年12月25日 星期五