
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者帳戶
- MySQL - 解鎖使用者帳戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 清空表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - INSERT 查詢
- MySQL - SELECT 查詢
- MySQL - UPDATE 查詢
- MySQL - DELETE 查詢
- MySQL - REPLACE 查詢
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - BEFORE INSERT 觸發器
- MySQL - AFTER INSERT 觸發器
- MySQL - BEFORE UPDATE 觸發器
- MySQL - AFTER UPDATE 觸發器
- MySQL - BEFORE DELETE 觸發器
- MySQL - AFTER DELETE 觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 通用表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字元集
- MySQL - 排序規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - SHOW PROCESSLIST
- MySQL - 修改列型別
- MySQL - 重置自動遞增
- MySQL - COALESCE() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 建立使用者
在 MySQL 中,您可以建立多個使用者帳戶來訪問資料庫,每個帳戶都有特定的身份驗證詳細資訊,例如密碼。可以使用 SQL 語句(例如,建立新使用者時的CREATE USER 身份驗證,以及分別分配和刪除管理許可權的GRANT 和REVOKE)授予這些使用者特定許可權。
MySQL CREATE USER 語句
我們可以使用 MySQL 中的 CREATE USER 語句建立一個新的使用者帳戶。要執行此語句,當前帳戶必須具有 CREATE USER 許可權或 MySQL 系統模式的 INSERT 許可權。
語法
以下是 MySQL CREATE USER 語句的語法:
CREATE USER 'user_name'@'host_name' IDENTIFIED BY 'password';
其中:
user_name 是您需要建立的使用者名稱。
hostname 指定使用者可以從中連線的主機。
password 是使用者的密碼。
示例
在下面的查詢中,我們正在建立一個名為“sample”的使用者,該使用者只能從“localhost”主機連線,並將他們的密碼設定為“123456”。請確保您已使用具有管理員許可權(root)的使用者登入:
CREATE USER 'sample'@'localhost' IDENTIFIED BY '123456';
輸出
輸出將顯示為:
Query OK, 0 rows affected (0.12 sec)
驗證
您可以使用以下查詢驗證使用者列表:
SELECT USER FROM MySQL.USER;
表將顯示如下:
使用者 |
---|
mysql.infoschema |
mysql.session |
mysql.sys |
myuser |
openkm |
root |
sample |
在 MySQL 中授予許可權
您可以使用 GRANT ALL 語句向建立的使用者授予所有許可權。這允許您為使用者提供對資料庫、表執行操作(例如 SELECT、INSERT 或 DELETE)的特定許可權。
語法
以下是 MySQL 中授予所有許可權的語法:
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
示例
以下查詢授予使用者“sample”在從“localhost”主機連線時對任何資料庫或表執行任何操作的完全許可權,從而提供對本地 MySQL 伺服器的完全控制:
GRANT ALL PRIVILEGES ON * . * TO 'sample'@'localhost';
輸出
輸出將顯示為:
Query OK, 0 rows affected (0.02 sec)
以不同使用者身份登入
要在 MySQL 中以不同的使用者身份登入,如果已經登入,則應首先退出當前 MySQL 會話,然後在系統的命令提示符或終端中(而不是在 MySQL shell 本身中)執行命令-u user_name -p。
示例
在這裡,我們正在執行-u sample -p 命令。執行該命令後,系統將提示您輸入指定使用者的密碼。輸入正確的密碼以如下所示的使用者身份登入:
mysql -u sample -p Enter password: ******
輸出
這將以 sample 使用者身份登入,並具有如下所示的相應許可權和許可:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 8.0.22 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
EXPIRE 子句
如果您使用 expire 子句,舊密碼(當前密碼)將立即過期,使用者需要在第一次連線時選擇新密碼。
示例
在這裡,我們首先刪除現有的“sample”@“localhost”使用者:
DROP user sample@localhost;
我們現在正在建立一個新的“sample”@“localhost”使用者,密碼為“MyPassword”,同時立即使密碼過期,強制使用者在第一次登入時設定新密碼:
CREATE USER 'sample'@'localhost' IDENTIFIED BY 'MyPassword' PASSWORD EXPIRE;
現在,如果您以新建立的使用者身份登入,將生成錯誤。因此,要以新建立的使用者身份登入,請開啟命令提示符,瀏覽到 MySQL 目錄的 bin 資料夾,然後執行以下命令:
C:\Program Files\MySQL\MySQL Server 8.0\bin> mysql -u sample@localhost -p Enter password: **********
此時執行任何 MySQL 命令都將觸發如下所示的錯誤訊息:
select now();
獲得的輸出如下所示:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
由於密碼已過期,因此會生成上述錯誤訊息。要解決此問題,我們需要使用以下命令更改(重置)密碼:
SET PASSWORD='passwordtest';
生成的輸出如下所示:
Query OK, 0 rows affected (0.34 sec)
您還可以為 EXPIRE 子句設定一個間隔,以實現定期更改密碼,如下所示:
DROP user sample@localhost; CREATE USER 'sample'@'localhost' IDENTIFIED BY 'MyPassword' PASSWORD EXPIRE INTERVAL 25 DAY FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1;
執行上述程式碼後,我們將獲得以下輸出:
Query OK, 0 rows affected (0.20 sec)
使用者評論
在 MySQL 中建立使用者時,您可以使用 COMMENT 子句向用戶添加註釋。這提供了有關使用者的其他資訊或上下文。
示例
在下面的示例中,我們首先刪除現有的“sample”@“localhost”使用者。然後,我們建立一個新的“sample”@“localhost”使用者,同時添加註釋來描述使用者:
drop user sample@localhost; CREATE USER 'sample'@'localhost' COMMENT 'Sample information';
輸出
獲得的結果如下所示:
Query OK, 0 rows affected (0.10 sec)
驗證
您可以使用以下 SELECT 查詢驗證屬性和註釋資訊:
SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES WHERE USER='sample' AND HOST='localhost';
生成的輸出如下所示:
使用者 | 主機 | 屬性 |
---|---|---|
sample | localhost | {"comment": "Sample information"} |
使用者屬性
在建立使用者帳戶時,您可以使用 ATTRIBUTE 子句向 MySQL 中的使用者新增屬性。這些屬性可以儲存有關使用者的其他資訊。
示例
在這裡,我們首先刪除現有的“sample@localhost”使用者。然後,我們建立一個新的“sample”@“localhost”使用者,其屬性“attr1”和“attr2”分別設定為“val1”和“val2”,並與使用者帳戶相關聯:
DROP user sample@localhost; CREATE USER 'sample'@'localhost' ATTRIBUTE '{"attr1": "val1", "attr2": "val2"}';
獲得的結果如下所示:
輸出
Query OK, 0 rows affected (0.09 sec)
驗證
您可以使用以下 SELECT 查詢驗證屬性和註釋資訊:
SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES WHERE USER='sample' AND HOST='localhost';
獲得的結果如下所示:
使用者 | 主機 | 屬性 |
---|---|---|
sample | localhost | {"attr1": "val1", "attr2": "val2"} |
IF NOT EXISTS 子句
如果您嘗試建立具有現有名稱的使用者,則會生成錯誤。為防止此錯誤並確保僅在使用者不存在時才建立使用者,您可以使用“IF NOT EXISTS”子句。
示例
下面的例子中,我們建立了一個名為 'sample@localhost' 的使用者,**沒有**使用 "IF NOT EXISTS" 子句。
CREATE USER 'sample@localhost';
從下面的輸出中可以看到,生成了一個錯誤。
ERROR 1396 (HY000): Operation CREATE USER failed for 'sample@localhost'@'%'
但是,如果我們在 CREATE 語句中使用 "IF NOT EXISTS" 子句,則會建立一個新使用者;如果已存在具有給定名稱的使用者,則該查詢將被忽略。
CREATE USER IF NOT EXISTS 'sample@localhost';
以下是獲得的輸出。
Query OK, 0 rows affected, 1 warning (0.01 sec)
使用客戶端程式建立使用者
除了使用 MySQL 查詢在 MySQL 資料庫中建立使用者外,我們還可以使用客戶端程式建立使用者。
語法
以下是使用各種程式語言建立 MySQL 使用者的語法:
MySQL PHP 聯結器 mysqli 提供了一個名為 query() 的函式,用於在 MySQL 資料庫中執行 SQL 查詢。要在 MySQL 中建立使用者,我們需要使用此函式執行 CREATE USER 語句,如下所示:
$sql = "CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'"; $mysqli->query($sql);
要使用 NodeJS 程式建立使用者,我們需要使用名為 query() 的函式執行 CREATE USER 語句,如下所示:
sql= " CREATE USER [IF NOT EXISTS] account_name IDENTIFIED BY 'password'; con.query(sql, function (err, result) { if (err) throw err; console.log(result); });
要使用 Java 程式在 MySQL 資料庫中建立使用者,我們需要使用名為 execute() 的 JDBC 函式執行 CREATE USER 語句,如下所示:
sql = "CREATE USER 'USER_NAME'@LOCALHOST INDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'PASSWORD'"; statement.execute(sql);
MySQL Connector/Python 提供了一個名為 execute() 的函式,用於在 MySQL 資料庫中執行 SQL 查詢。要在 MySQL 資料庫中建立使用者,我們需要使用此函式執行 CREATE USER 語句,如下所示:
sql = "CREATE USER 'UserNew'@'localhost' IDENTIFIED BY 'newPassword'"; cursorObj.execute(sql)
示例
以下是用於在 MySQL 中建立使用者的客戶端程式:
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass); if($mysqli->connect_errno ) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } //printf('Connected successfully.
'); $sql = "CREATE USER 'Revathi'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'"; if($mysqli->query($sql)){ printf("User created successfully...!"); } if($mysqli->error){ printf("Failed..!" , $mysqli->error); } $mysqli->close();
輸出
獲得的輸出如下:
User created successfully...!
var mysql = require('mysql2'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "Nr5a0204@123" }); //Connecting to MySQL con.connect(function (err) { if (err) throw err; console.log("Connected!"); console.log("--------------------------"); //Creating User sql = "CREATE USER 'sample'@'localhost' IDENTIFIED BY '123456';" con.query(sql); //List of users sql = "select user from MySQl.user;" con.query(sql, function(err, result){ if (err) throw err console.log(result) }); });
輸出
生成的輸出如下:
Connected! -------------------------- [ { user: 'mysql.infoschema' }, { user: 'mysql.session' }, { user: 'mysql.sys' }, { user: 'root' }, { user: 'sample' } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class CreateUsers { public static void main(String[] args) { String url = "jdbc:mysql://:3306/TUTORIALS"; String user = "root"; String password = "password"; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection con = DriverManager.getConnection(url, user, password); Statement st = con.createStatement(); //System.out.println("Database connected successfully...!"); String sql = "CREATE USER 'Vivek'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'"; st.execute(sql); System.out.println("User 'Vivek' created successfully...!"); }catch(Exception e) { e.printStackTrace(); } } }
輸出
獲得的輸出如下所示:
User 'Vivek' created successfully...!
import mysql.connector # creating the connection object connection = mysql.connector.connect( host='localhost', user='root', password='password', database='textx' ) # Create a cursor object for the connection cursorObj = connection.cursor() cursorObj.execute("CREATE USER 'UserNew'@'localhost' IDENTIFIED BY 'newPassword'") print("User 'newUser' is created successfully.") cursorObj.close() connection.close()
輸出
以上程式碼的輸出如下:
User 'newUser' is created successfully.