發表文章

[database]mysql 如何防駭

 MySQL 資料庫的安全性非常重要,特別是你的應用需要全球打卡,涉及大量用戶數據。為了防止駭客攻擊,你可以從以下幾個層面加強防護: 1. 使用強密碼與最小權限原則 ✅ 強密碼策略 確保 MySQL 帳戶使用強密碼,避免簡單密碼被破解: ALTER USER 'youruser' @ '%' IDENTIFIED WITH mysql_native_password BY 'StrongP@ssw0rd!' ; 可透過 validate_password 外掛來強制執行: INSTALL PLUGIN validate_password SONAME 'validate_password.so' ; SET GLOBAL validate_password_policy = STRONG; ✅ 最小權限原則 不要讓應用程式帳戶擁有 ALL PRIVILEGES ,只給必要的權限: GRANT SELECT , INSERT , UPDATE ON mydb. * TO 'appuser' @ '%' ; 2. 限制 MySQL 連線與遠端存取 ✅ 避免 MySQL 允許遠端連線 除非必要,不允許外部 IP 直接連線 MySQL,編輯 my.cnf : bind-address = 127.0 . 0.1 如果必須開放,則 限制特定 IP : CREATE USER 'appuser' @ 'your.server.ip' IDENTIFIED BY 'password' ; 3. 防 SQL Injection(SQL 注入攻擊) ✅ 使用 Prepared Statements 永遠不要在 SQL 查詢中拼接使用者輸入,應該使用 Prepared Statement : import 'package:mysql1/mysql1.dart'; void insertCheckIn(MySqlConnection conn, double latitude, double longitude) async { await ...

[MySQL]修改MySQL 時區

在 MySQL 中,時區 ( time_zone ) 影響到 時間函式(如 NOW() )的輸出 ,但 不影響 TIMESTAMP 類型的儲存,因為 TIMESTAMP 會自動轉換為 UTC 存儲 。 ✅ 1. 檢查 MySQL 當前時區 執行以下 SQL 查詢: SELECT @ @global .time_zone, @ @session .time_zone; 回傳可能是: + --------------------+---------------------+ | @ @global .time_zone | @ @session .time_zone | + --------------------+---------------------+ | SYSTEM | + 00 : 00 | + --------------------+---------------------+ 這表示: @@global.time_zone 為 SYSTEM (使用系統時區) @@session.time_zone 為 UTC+0 SELECT @@global.time_zone, @@session.time_zone;  ✅ 2. 修改 MySQL 時區 方法 1:臨時修改(不影響重啟後設定) 🔹 修改當前連線(Session)時區 SET time_zone = '+08:00' ; -- 設定為台北(UTC+8) 驗證變更: SELECT NOW(); 🔹 修改全域(Global)時區 SET GLOBAL time_zone = '+08:00' ; 這樣所有新的連線都會使用 UTC+8 ,但 MySQL 重啟後會恢復預設值 。 方法 2:永久修改(影響 MySQL 服務) 如果想要 永久修改 MySQL 時區,需要編輯 MySQL 配置檔案 。 🔹 1. 編輯 my.cnf 或 my.ini Linux/macOS (通常在 /etc/mysql/my.cnf 或 /etc/my.cnf ): sudo nano /etc/mysql/my.cnf Windows (通常在 C:\ProgramData\MySQL\M...

如何從 SQL Server 預存程序呼叫 API (Calling an API from SQL Server stored procedure)

在 SQL Server 預存程序中呼叫 API,通常需要使用 SQL Server 的內建功能,例如 sp_OA* 系列存儲過程 或基於 CLR 的自定義功能。以下是幾種實現方式及其步驟。 方法 1:使用 sp_OA* 系列存儲過程 SQL Server 內建了 sp_OACreate 和 sp_OAMethod 等存儲過程,可以用來呼叫外部 COM 物件(例如用於發送 HTTP 請求)。 範例:透過 sp_OA* 呼叫 REST API sql CREATE PROCEDURE CallExternalAPI AS BEGIN DECLARE @Object INT DECLARE @ResponseText NVARCHAR(MAX) DECLARE @URL NVARCHAR( 200 ) = 'https://api.example.com/data' -- 創建對象 EXEC sp_OACreate 'MSXML2.XMLHTTP' , @Object OUT -- 發送 HTTP GET 請求 EXEC sp_OAMethod @Object , 'Open' , NULL , 'GET' , @URL , FALSE EXEC sp_OAMethod @Object , 'Send' -- 獲取響應 EXEC sp_OAMethod @Object , 'responseText' , @ResponseText OUTPUT -- 打印響應內容 PRINT @ResponseText -- 清理對象 EXEC sp_OADestroy @Object END GO 注意 安全性 : sp_OA* 功能默認是禁用的,因為它存在安全風險。您需要啟用它才能使用: sql EXEC sp_configure 'show advanced options' , 1 ; RECONFIGURE; EXEC sp_configure 'Ole A...

在insert資料時取得序號欄位值(臨時資料表)

drop table if exists #test_t create table #test_t (   sn bigint,   sid nvarchar(50),   no nvarchar(50),   name nvarchar(50) ) insert into test(sid, no, name) output inserted.sn, inserted.sid, inserted.no, inserted.name into #test_t values('123','1','2') insert into test(sid, no, name) output inserted.sn, inserted.sid, inserted.no, inserted.name into #test_t values('222','1','2') select * from #test_t select * from test