14.7.1.2 MySQL創建用戶句法

来源:http://www.cnblogs.com/JoiT/archive/2017/01/17/6293010.html
-Advertisement-
Play Games

翻譯MySQL官方文檔隨筆——Create User Syntax MySQL Create User Syntax mysql創建用戶 mysql create user ...


14.7.1.2 CREATE USER Syntax

單擊此處查看原文

以下是MySQL 5.7.6及以上版本CREATE USER句法

CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...

user:
    '詳情參見:
    
    Section 7.2.3, “Specifying Account Names”
    
    https://dev.mysql.cm/doc/refman/5.7/en/account-names.html'

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED BY PASSWORD 'hash_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'hash_string'
}

tls_option: {
   SSL
 | X509
 | CIPHER 'cipher'
 | ISSUER 'issuer'
 | SUBJECT 'subject'
}

resource_option: {
    MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

password_option: {
    PASSWORD EXPIRE
  | PASSWORD EXPIRE DEFAULT
  | PASSWORD EXPIRE NEVER
  | PASSWORD EXPIRE INTERVAL N DAY
}

lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

以下是MySQL 5.7.6以前版本CREATE USER句法

CREATE USER
    user [auth_option] [, user [auth_option]] ...

user:
    '詳情參見: 
     
     Section 7.2.3, “Specifying Account Names”)
     
     https://dev.mysql.com/doc/refman/5.7/en/account-names.html'

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED BY PASSWORD 'hash_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin AS 'hash_string'
}

CREATE USER 語句將會創建一個新的MySQL賬戶。它允許賬戶認證屬性被建立。在MySQL 5.7.6中,它也可能建立認證、SSL/TLS、資源限制、賬戶密碼過期時間、賬戶鎖定和解鎖等屬性。

一個賬戶在建立之初是沒有許可權的。

使用 CREATE USER 你必須有全局的 CREATE USER 許可權,或者有對mysql資料庫進行 INSERT 的許可權。當設置了 read only 系統變數時, CREATE USER 還需要 SUPER 許可權。

如果你嘗試創建一個已經存在的賬戶將會觸發異常。

MySQL 5.7.8 中 ,可以使用IF NOT EXISTS 語句。這樣當嘗試創建已有用戶時,會拋出警告而非異常。

每個賬戶, CREATE USER 語句會在mysql.user表中創建一條新紀錄。這條記錄會reflects(反射?還是要翻譯為反映?)在語句中指定的賬戶屬性。沒有被指定的賬戶屬性將會得到一個預設值。

例1:使用預設的認證插件來創建一個賬戶並設置預設密碼。如果設置密碼已經過期,那麼用戶必須在首次連接mysql伺服器的時候重新設置密碼。

CREATE USER 'jeffrey'@'localhost'
  IDENTIFIED BY 'new_password' PASSWORD EXPIRE;

例2:使用 sha256_password 認證插件創建一個賬戶並設置預設密碼。設置每180天必須更新密碼。

CREATE USER 'jeffrey'@'localhost'
  IDENTIFIED WITH sha256_password BY 'new_password'
  PASSWORD EXPIRE INTERVAL 180 DAY;

要點
在某些情況下, CREATE USER 的使用可能會被記錄在伺服器日誌中,或者記錄在客戶端的歷史文件中,比如:~/.mysql_history。這意味著用戶的明文密碼會被任何有權閱讀日誌的人看到。關於伺服器日誌產生的條件和如何控制它,參見Section 7.1.2.3, “Passwords and Logging"。客戶端的參見Section 5.5.1.3, “mysql Logging"

其他設置密碼和認證插件的相關信息,參見Section 7.3.5, “Assigning Account Passwords”, and Section 7.3.8, “Pluggable Authentication”.

在MySQL 5.7.6中創建用戶

每個賬戶名的格式,參見Section 7.2.3, “Specifying Account Names”
例如:

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';

如果省略了賬戶名中的主機名(localhost)部分,會預設為 %

上述語句,賬戶名稱('jeffrey'@'localhost')後面可以帶上一個可選項 auth_option ,它指定了該賬戶將會如何被認證。這些values允許指定賬戶的認證插件和資格證明(密碼)。每個 auth_option 值只會在用戶命名賬戶之前生效。

在用戶範式中,語句可能會包含可選的設置:SSL/TLS, 資源限制, 密碼過期, 鎖定屬性。所有這些可選項在當前語句中都是全局的,可以應用到每個命名賬戶中。

例如:以下的語句將會創建兩個賬戶,每個都使用預設的認證插件和預設密碼。每個賬戶若要被允許,在連接時必須使用一個合法的X509證書,並且要高達 60次查詢/每小時。在最初每個賬戶都是被鎖定的,所以它們只是有效的占位符,在管理員解鎖它們之前都無法使用。

CREATE USER
  'jeffrey'@'localhost' IDENTIFIED BY 'new_password1',
  'jeanne'@'localhost' IDENTIFIED BY 'new_password2'
  REQUIRE X509 WITH MAX_QUERIES_PER_HOUR 60
  ACCOUNT LOCK;

如果省略可選項,它們將會使用如下的預設值:

  • Authentication:認證插件會被default_authentication_plugin系統變數定義,並且賦空密碼。
  • SSL/TSL:NONE
  • Resource limits:Unlimited
  • Password expiration:PASSWORD EXPIRE DEFAULT
  • Account locking:ACCOUNT UNLOCK

Authentication Options

一個賬戶名之後可能會帶上可選項 authentication option 來指定賬戶認證插件、密碼,或者兩個都有:

  • auth_plugin 命名了一個認證插件。這個插件名可以是一個引用字元串或者不帶引號的標識符。插件名被存儲在mysql.user表的plugin列中。
  • auth_string 或者 hash_string 指定了賬戶密碼。無論是明文或者散列,認證插件都分別規定了一個期望的格式。密碼將會被存儲在mysql.user表的authentication_string 列中。

CREATE USER 語句允許這些 auth_option 句法:

  • IDENTIFIED BY 'auth_string'
    設置了賬戶認證插件為預設,hashes了明文密碼 'auth_string' ,並且存儲在mysql.user表中。(那個hashes不會翻啊,是打亂嗎?哈哈哈)

  • IDENTIFIED BY PASSWORD 'hash_string'
    設置了賬戶認證拆件為預設,設置了哈希密碼 'hash_string' ,並且存儲在mysql.user表中,這裡假定了hash字元串符合了插件的期望格式。

註意
此句法已經過時,將會在下個MySQL發行版中移除。

  • IDENTIFIED WITH auth_plugin
    設置了賬戶認證插件為 auth_plugin ,並將密碼清空,存儲在mysql.user表中。

  • IDENTIFIED WITH auth_plugin BY 'auth_string'
    設置了賬戶認證插件為 auth_plugin ,hashes了明文密碼 auth_string ,存儲在mysql.user表中。

  • IDENTIFIED WITH auth_plugin AS 'hash_string'
    設置了賬戶認證插件為 auth_plugin ,設置了哈希密碼 'hash_string' ,存儲在mysql.user表中,這裡假定了hash字元串符合了插件的期望格式。

除非default_authentication_plugin系統變數被設置,否則預設的插件就是mysql_native_password。更多詳情,參見Section 7.5.1, “Authentication Plugins”

例1:指定了明文密碼,使用預設插件:

CREATE USER 'jeffrey'@'localhost'
  IDENTIFIED BY 'mypass';

例2:指定了認證插件,以及明文密碼:

CREATE USER 'jeffrey'@'localhost'
  IDENTIFIED WITH mysql_native_password BY 'mypass';

SSL/TLS Options

MySQL可以檢查X509證書特性,除了基於用戶名和密碼的通用證書。詳情參見Section 7.4, “Using Secure Connections”

為MySQL賬戶指定SSL/TSL-related option,要使用REQUIRE語句,它可以用來指定一個或者多個tls_option
CREATE USER 允許如下 tls_option :

  • NONE
    表示這個賬號不帶SSL或者X509證書的要求。如果用戶名和密碼合法,非加密連接就會被允許。不過如果在客戶端設置中如果有適合的證書和密鑰文件,加密連接也是可以被使用的。

  • SSL
    通知服務端這個賬戶只允許加密連接。

    CREATE USER 'jeffrey'@'localhost' REQUIRE SSL;

    在MySQL 5.7.3中,一個客戶端只有在指定了 --ssl之後才能獲得加密連接,如果一個加密連接無法被建立,那本次的嘗試連接就會失敗。在MySQL 5.7.3之前的版本中,客戶端必須指定 --ssl-ca--ssl-key--ssl-cert中的其中一個參數才行。如果既不指定 --ssl-cs也不指定 --ssl-capath,那客戶端就不會驗證伺服器證書。

  • X509
    需要客戶端必須有合法的證書,但是確切的證書、發行人、主題都不重要。唯一的要求是它需要能夠從CA證書中驗證它的簽名。使用X509證書總是預設加密,所以SSL選項就不重要了。

    CREATE USER 'jeffrey'@'localhost' REQUIRE X509;

    客戶端必須指定--ssl-key--ssl-cert選項來進行連接。(它推薦而非必須 --ssl-ca也要被指定,使得公共證書提供者在伺服器可以被驗證)。發行人和主題也是如此,因為REQUIRE選項隱含了X509的這些要求。

  • ISSUER 'issuer'
    在嘗試連接的時候會加以限制,用戶必須提供一份由認證中心(CA) issurr 提供的合法X509證書。如果客戶端提供了一份合法但是認證中心不一致的證書,伺服器會拒絕連接。使用X509證書總是預設加密,所以SSL選項就不是必填項了。
    因為ISSUER隱含了X509的要求,客戶端必須指定--ssl-key--ssl-cert選項來進行連接。(它推薦而非必須 --ssl-ca也要被指定,使得公共證書提供者在伺服器可以被驗證)。

  • SUBJECT 'subject'
    在嘗試連接的時候會加以限制,因此客戶端必須提供一份包含 subject 主題的合法X509證書。如果客戶端提供了一份合法但是不包含此主題的證書,伺服器會拒絕連接。使用X509證書總是預設加密,所以SSL選項就不是必填項了。
    因為SUBJECT隱含了X509的要求,客戶端必須指定--ssl-key--ssl-cert選項來進行連接。(它推薦而非必須 --ssl-ca也要被指定,使得公共證書提供者在伺服器可以被驗證)。

    CREATE USER 'jeffrey'@'localhost'
      REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/
        O=MySQL demo client certificate/
        CN=client/[email protected]';

    MySQL會對語句中主題的值跟證書進行簡單的字元串比對,所以字母大小寫和語句成分的順序一定要與證書中給出的完全一致。

    註意
    對於 emailAddress ,參見 REQUIRE ISSUER註意內容。

  • CIPHER 'cipher'
    加密連接會請求一個指定的加密方式。這個選項是必須的,用於確保密碼和密鑰的長度以及強度。如果老演算法使用的是短的加密密碼,SSL本身可以比較弱。

    CREATE USER 'jeffrey'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';

    SUBJECTISSUERCIPHER 可以在 REQUIRE 語句中被組合起來:

    CREATE USER 'jeffrey'@'localhost'
      REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/
        O=MySQL demo client certificate/
        CN=client/[email protected]'
      AND ISSUER '/C=SE/ST=Stockholm/L=Stockholm/
        O=MySQL/CN=CA/[email protected]'
      AND CIPHER 'EDH-RSA-DES-CBC3-SHA';

    每個選項的順序無所謂,但是都不可以被指定兩次。AND 關鍵字是可選的。

Resource-Limit Options

一個賬戶在訪問伺服器資源時,可能被加以限制,詳情參見:Section 7.3.4, “Setting Account Resource Limits”。寫語句時,使用 WITH 語句來指定一個或者多個 resource_option

CREATE USER 允許下列的 resource_option

  • MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count, MAX_CONNECTIONS_PER_HOUR count
    這些選項限制了一個賬戶的每小時查詢的數量、每小時更新數量,以及每小時對伺服器的連接數量(如果是從查詢緩存中出來的數據,則不受 MAX_QUERIES_PER_HOUR 的限制)。如果 count 為0(預設為0),意味著此賬戶的查詢無限制。

  • MAX_USER_CONNECTIONS count
    限制了一個賬戶對伺服器的併發連接數。一個非零的 count 顯式指定此限制,如果為0(預設為0),伺服器會根據全局系統變數max_user_connections來決定併發量。如果max_user_connections也為0,那麼此賬戶的併發連接量將無限制。

例如:

CREATE USER 'jeffrey'@'localhost'
  WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;

如果限制的是次數,那麼最新的一個實例將具有優先權。

Password-Expiration Options

CREATE USER 提供 password_option 選項來管理密碼過期,賬戶密碼過期失效或者建立密碼過期策略( policy )。 policy 選項不會使得密碼過期,它只是決定了伺服器何時自動過賬戶密碼(詳情參見Section 7.3.6, “Password Expiration Policy”)。

密碼的生命周期由最近一次更新的日期時間進行評估。

CREATE USER 允許以下 password_option

  • PASSWORD EXPIRE
    使得賬戶密碼過期:

    CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
  • PASSWORD EXPIRE DEFAULT
    使用全局系統變數max_user_connections來指定密碼過期策略。

    CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
  • PASSWORD EXPIRE NEVER
    禁止密碼過期。

    CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
  • PASSWORD EXPIRE INTERVAL N DAY
    每過N天密碼過期。

    CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;

如果指定了多個過期策略,將使用最後一次指定的策略。

如果一個賬戶的密碼手動過期或者由於超過了自動過期策略決定的密碼生命周期,一個客戶端session操作將會進入限制模式。在限制模式中,session中執行操作會得到一個異常的結果,知道建立一個新的賬戶密碼,詳情參見:Section 7.3.6, “Password Expiration Policy”

Account-Locking Options

MySQL支持使用 ACCOUNT LOCKACCOUNT UNLOCK 來進行賬戶鎖定和解鎖,它們指定了賬戶的鎖狀態。詳情參見Section 7.3.10, “User Account Locking”

如果指定了多個 account-option ,最後一次指定的將會優先使用。

CREATE USER Before MySQL 5.7.6

下麵有空再翻譯了沒空就算了哈哈哈。



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

-Advertisement-
Play Games
更多相關文章
  • 遇到的問題 1、最初階段 系統中做了一個監控功能,用於記錄所有的請求數據,數據插入頻繁,量非常大,比如一天1000萬條。考慮到數據插入的效率,就使用記憶體KV緩存來保存。寫入過程是在接收到請求後放入到線程池中,然後線程池非同步處理後寫入。到這問題基本上沒什麼事情。 2、新的需求 後面數據保存了,就需要在 ...
  • httpd yum install httpd -y systemctl status httpd systemctl start httpd systemctl stop firewalld Mariadb yum install mariadb-server mariadb-client -y ...
  • SQL Server 其實從SQL Server 2005開始,也提供了類似ORACLE中固定執行計劃的功能,只是好像很少人使用這個功能。當然在SQL Server中不叫"固定執行計劃"這個概念,而是叫"執行計劃指南"(Plan Guide 很多翻譯是計劃指南,個人覺得執行計劃指南稍好一些)。當然兩... ...
  • 最近在做oracle相關的項目,剛接觸oracle,與sqlserver語法上還是有區別的 sqlserver : 示例:FX+當前年月日+00001 如下圖流水號實力所示 原理: 首先 'FX'是固定的,獲取當前年月日方法在sqlserver中分別是: 1.年:YEAR(GETDATE()) 2. ...
  • 一、博客前言 自接觸學習MySQL已有一段時間了,對於MySQL的基礎知識還是有一定的瞭解的。在這一路學習過來,每次不管看書還是網上看的資料,對於MySQL數據類型中的時間日期類型總是一掃而過,不曾停下來認認真真的研究學習。最近在圖書館借了一本關於MysQL的書籍,打算全面的學習研究一遍。 在之前, ...
  • 本篇源碼基於趙星對Spark 1.3.1解析進行整理。話說,我不認為我這下文源碼的排版很好,不能適應的還是看總結吧。 雖然1.3.1有點老了,但對於standalone模式下的Master、Worker和劃分stage的理解是很有幫助的。 總結: master和worker都要創建ActorSyst ...
  • 通過授予和拒絕(Grant/Deny)命令控制用戶的許可權,只能控制用戶對資料庫對象的訪問許可權,這意味著,用戶訪問的粒度是對象整體,可以是一個數據表,或視圖等,用戶要麼能夠訪問資料庫對象,要麼沒有許可權訪問,就是說,一個資料庫對象,通過授予和拒絕用戶的許可權/角色(Permission或Role),無法使 ...
  • 一、Mysql-Proxy原理 Mysql-Proxy是一個處於你的client端和Mysql Server端之間的一個簡單程式,它可以監測、分析和改變他們的通信。它使用靈活沒有限制,常見的用途包括:負載平衡,故障、查詢分析,查詢過濾和修改等等。 Mysql -Proxy就是這麼一個中間層代理,簡單 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...