MySQL參數log_bin_trust_function_creators介紹

来源:http://www.cnblogs.com/kerrycode/archive/2017/10/09/7641835.html
-Advertisement-
Play Games

MySQL的有個參數log_bin_trust_function_creators,官方文檔對這個參數的介紹、解釋如下所示: log_bin_trust_function_creators Command-Line Format --log-bin-trust-function-creators S... ...


 

MySQL的有個參數log_bin_trust_function_creators,官方文檔對這個參數的介紹、解釋如下所示:

 

 

log_bin_trust_function_creators

Command-Line Format

--log-bin-trust-function-creators

System Variable

Name

log_bin_trust_function_creators

Variable Scope

Global

Dynamic Variable

Yes

Permitted Values

Type

boolean

Default

FALSE

 

 

This variable applies when binary logging is enabled. It controls whether stored function creators can be trusted not to create stored functions that will cause unsafe events to be written to the binary log. If set to 0 (the default), users are not permitted to create or alter stored functions unless they have the SUPER privilege in addition to the CREATE ROUTINE or ALTER ROUTINE privilege. A setting of 0 also enforces the restriction that a function must be declared with the DETERMINISTIC characteristic, or with the READS SQL DATA or NO SQL characteristic. If the variable is set to 1, MySQL does not enforce these restrictions on stored function creation. This variable also applies to trigger creation. See Section 23.7, “Binary Logging of Stored Programs”.

 

 

簡單介紹一下,當二進位日誌啟用後,這個變數就會啟用。它控制是否可以信任存儲函數創建者,不會創建寫入二進位日誌引起不安全事件的存儲函數。如果設置為0(預設值),用戶不得創建或修改存儲函數,除非它們具有除CREATE ROUTINE或ALTER ROUTINE特權之外的SUPER許可權。 設置為0還強制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性聲明函數的限制。 如果變數設置為1,MySQL不會對創建存儲函數實施這些限制。 此變數也適用於觸發器的創建。 請參見第23.7節Binary Logging of Stored Programs

 

下麵我們測試一下,當開啟二進位日誌後,如果變數log_bin_trust_function_creators為OFF,那麼創建或修改存儲函數就會報ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)這樣的錯誤,如下所示:

 

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)
 
mysql>  show variables like '%log_bin_trust_function_creators%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+
1 row in set (0.00 sec)
 
mysql> 
mysql> DELIMITER //
mysql> CREATE FUNCTION GET_UPPER_NAME(emp_id INT)
    -> RETURNS VARCHAR(12)
    -> BEGIN
    ->   RETURN(SELECT UPPER(NAME) FROM TEST WHERE ID=emp_id);
    -> END
    -> //
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
mysql> 

 

在調用存儲函數時,也會遇到這個錯誤,如下測試所示:

 

 

mysql> DELIMITER ;
mysql> set global log_bin_trust_function_creators=1;
Query OK, 0 rows affected (0.00 sec)
 
mysql> DELIMITER //
mysql> CREATE FUNCTION GET_UPPER_NAME(emp_id INT)
    -> RETURNS VARCHAR(12)
    -> BEGIN
    ->   RETURN(SELECT UPPER(NAME) FROM TEST WHERE ID=emp_id);
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT ID,
    ->        GET_UPPER_NAME(ID)
    -> FROM TEST;
    -> //
+------+--------------------+
| ID   | GET_UPPER_NAME(ID) |
+------+--------------------+
|  100 | KERRY              |
|  101 | JIMMY              |
+------+--------------------+
2 rows in set (0.00 sec)
 
mysql> DELIMITER ;
mysql> set global log_bin_trust_function_creators=0;
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT ID,
    ->        GET_UPPER_NAME(ID)
    -> FROM TEST;
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
mysql> 

 

clip_image001

 

 

那麼為什麼MySQL有這樣的限制呢? 因為二進位日誌的一個重要功能是用於主從複製,而存儲函數有可能導致主從的數據不一致。所以當開啟二進位日誌後,參數log_bin_trust_function_creators就會生效,限制存儲函數的創建、修改、調用。那麼此時如何解決這個問題呢?官方文檔介紹如下,具體可以參考23.7 Binary Logging of Stored Programs

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當一個應用程式在Android中安裝後,我們在使用應用的過程中會產生很多的數據,應用都有自己的數據,那麼我們應該如何存儲數據呢? 數據存儲方式 Android 的數據存儲有5種方式: 1. SharedPreferences存儲數據 SharedPreferences數據存儲,也叫作xml存儲。這是 ...
  • 使用SQL語句查詢是開發中常做的事,在實際的情況中,可能會遇到,查詢包含某個關鍵詞的所有行,而這個關鍵詞正好也是SQL SERVER的關鍵詞。 下麵有一張表Member,有如下的數據: 假如需要查詢名字中包含%字元的數據,首先我們會有這樣的查詢語句: SELECT * FROM dbo.Member ...
  • 一、關於Oracle用戶許可權表的認知 在Oracle中有很多的用戶,不同的用戶有著不同的許可權,在學習階段,一般使用的是scott用戶,並且對該用戶的表進行增刪改查等操作。下麵就簡單介紹一下常見的用戶。 sys;//系統管理員,擁有Oracle的最高的許可權; system;//本地管理員,擁有次高的權 ...
  • 隨著業務發展和數據積累,你的 Redis 伺服器變得越來越臃腫了,甚至記憶體爆滿影響了業務,那麼它是如何一步一步走到這個地步,又如何解決呢?希望本文能幫助到你。 ...
  • JDBC封裝 優點: 附註: DAO模式提供了訪問關係型數據系統所需操作的介面,將數據訪問和業務邏輯分開,對 上層提供面向對象的數據訪問介面. DAO模式實現兩層分離: 代碼間分工明確,數據訪問層代碼不影響業務邏輯層代碼,這也符合單一職能原則,降低了耦合度,提高了代碼的可復用性。。 隔離了不同的數據 ...
  • 創建用戶的語法: Create user `username`@host [Identified by [password] `password`]; 例: create user `teacher`@`localhost` identified by ‘12345’, 或者 create user ...
  • 0.目錄 1. "前言" 2. "最基本的SQL查詢語句" 3. "select...from..." 3.1 "“\ ”與“Top num \ ”" 3.2 "查詢指定列" 3.3 "Isnull函數:判斷空值" 3.4 "使用"+"將"列"與"字元串"連接起來(使用as重命名)" 4. "ord ...
  • Oracle資料庫 內置系統函數主要分為以下類別:數學函數、字元串函數、日期函數、轉換函數、聚集函數、分析/聚合函數 一、數學函數 返回數字 abs(n):返回數字n的絕對值 ceil(n):返回>=數字n的最小整數 floor(n):返回<=數字n的最大整數 round(n,[m]):做四捨五入運 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...