本文會列出 MySQL / MariaDB 在使用者帳號管理時,會用到的一些 SQL 語法及範例,包含登入帳號、查看帳號、新增帳號、設定權限、修改密碼、刪除帳號。

資料庫中的帳號表示

在建立帳號時,使用[帳號名稱]@[HOST]格式來表示。
'root'@'localhost':表示從 localhost 使用 root 帳號登入
'root'@'192.168.0.1':表示從 192.168.0.1 使用 root 帳號登入
'root'@'%':表示從任何地方使用 root 帳號登入

我們可以針對同一個帳號,的不同登入來源給予不同的權限。

登入帳號

            
                // 登入本機資料庫
                $ mysql -u [帳號] -p
                Enter password: [輸入密碼]

                // 登入遠端資料庫
                $ mysql -h [遠端IP] -P [遠端PORT] -u [帳號] -p
                Enter password: [輸入密碼]

                // 登入並指定要使用的資料庫
                $ mysql -D [資料庫名稱] -u [帳號] -p
                Enter password: [輸入密碼]
            
        

查看帳號

            
                -- 列出所有帳號
                SELECT user,host FROM mysql.user;

                -- 列出指定 root@localhost 的權限
                SHOW GRANTS FOR 'root'@'localhost';
            
        

新增帳號

            
                -- 建立 root@localhost 帳號,設定密碼為 123456
                CREATE USER 'root'@'localhost' IDENTIFIED BY '123456';
            
        

設定權限

            
                -- 授與使用所有資料庫的所有權限
                GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

                -- 授與使用 testDB 資料庫的所有權限
                GRANT ALL PRIVILEGES ON testDB.* TO 'root'@'localhost' WITH GRANT OPTION;

                -- 授與使用 testDB 資料庫的 SELECT、INSERT、UPDATE、DELETE 權限
                GRANT SELECT, INSERT, UPDATE, DELETE ON testDB.* TO 'root'@'localhost';

                -- 建立 root@localhost 帳號,設定密碼為 123456
                -- 授與使用所有資料庫的所有權限
                GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;

                -- 更新權限時,可以先移除所有權限,在授與必要的權限
                REVOKE ALL PRIVILEGES ON testDB.* FROM 'root'@'localhost';
                GRANT SELECT, INSERT, UPDATE, DELETE ON testDB.* TO 'root'@'localhost';

                -- 更新完權限,更新系統權限表
                FLUSH PRIVILEGES;
            
        

修改密碼

            
                -- 方法一: 修改密碼
                SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

                -- 方法二: 修改密碼
                ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

                -- 更新系統權限表
                FLUSH PRIVILEGES;
            
        

刪除帳號

            
                -- 撤銷所有權限
                REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'localhost';

                -- 更新系統權限表
                FLUSH PRIVILEGES;

                -- 移除帳號
                DROP USER 'root'@'localhost';