18.3 管理用戶以及授權

2022-06-01 16:21 更新

在生產環(huán)境中總不能一直“死啃”root管理員。為了保障數據庫系統的安全性,以及讓其他用戶協同管理數據庫,我們可以在MariaDB數據庫管理系統中為他們創(chuàng)建多個專用的數據庫管理賬戶,然后再分配合理的權限,以滿足他們的工作需求。為此,可使用root管理員登錄數據庫管理系統,然后按照“CREATE USER 用戶名@主機名 IDENTIFIED BY '密碼'; ”的格式創(chuàng)建數據庫管理賬戶。再次提醒大家,一定不要忘記每條數據庫命令后面的分號(;)。

    MariaDB [(none)]> CREATE USER luke@localhost IDENTIFIED BY 'linuxprobe';
    Query OK, 0 rows affected (0.00 sec)

創(chuàng)建的賬戶信息可以使用select命令語句來查詢。下面命令查詢的是賬戶luke的主機名稱、賬戶名稱以及經過加密的密碼值信息:

    MariaDB [(none)]> use mysql
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    MariaDB [mysql]> SELECT HOST,USER,PASSWORD FROM user WHERE USER="luke";
    +-----------+------+-------------------------------------------+
    | host      | user | password                                  |
    +-----------+------+-------------------------------------------+
    | localhost | luke | *55D9962586BE75F4B7D421E6655973DB07D6869F |
    +-----------+------+-------------------------------------------+

不過,用戶luke僅僅是一個普通賬戶,沒有數據庫的任何操作權限。不信的話,可以切換到luke賬戶來查詢數據庫管理系統中當前都有哪些數據庫??梢园l(fā)現,該賬戶甚至沒法查看完整的數據庫列表(剛才使用root賬戶時可以查看到3個數據庫列表):

    MariaDB [mysql]> exit
    Bye
    [root@linuxprobe ~]# mysql -u luke -p
    Enter password: 此處輸入luke賬戶的數據庫密碼
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 6
    Server version: 5.5.35-MariaDB MariaDB Server
    Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    +--------------------+
    1 row in set (0.03 sec)

數據庫管理系統所使用的命令一般都比較復雜。我們以grant命令為例進行說明。grant命令用于為賬戶進行授權,其常見格式如表18-1所示。在使用grant命令時需要寫上要賦予的權限、數據庫及表單名稱,以及對應的賬戶及主機信息。其實,只要理解了命令中每個字段的功能含義,也就不覺得命令復雜難懂了。

表18-1 GRANT命令的常見格式以及解釋

命令 作用
GRANT 權限 ON 數據庫.表單名稱 TO 用戶名@主機名 對某個特定數據庫中的特定表單給予授權
GRANT 權限 ON 數據庫.* TO 用戶名@主機名 對某個特定數據庫中的所有表單給予授權
GRANT 權限 ON . TO 用戶名@主機名 對所有數據庫及所有表單給予授權
GRANT 權限1,權限2 ON 數據庫.* TO 用戶名@主機名 對某個數據庫中的所有表單給予多個授權
GRANT ALL PRIVILEGES ON . TO 用戶名@主機名 對所有數據庫及所有表單給予全部授權(需謹慎操作)

當然,賬戶的授權工作肯定是需要數據庫管理員來執(zhí)行的。下面以root管理員的身份登錄到數據庫管理系統中,針對mysql數據庫中的user表單向賬戶luke授予查詢、更新、刪除以及插入等權限。

劉遄老師特別懂同學們現在心里想的是什么~哈哈,我起初也覺得在每條數據庫命令后都要加上;(分號)來結束特別的不方便,時常還會忘記,但敲的命令多了也就自然習慣了。授權操作執(zhí)行后來查看下luke用戶的權限吧:

    [root@linuxprobe ~]# mysql -u root -p
    Enter password:此處輸入root管理員在數據庫中的密碼
    MariaDB [(none)]> use mysql;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    MariaDB [mysql]> GRANT SELECT,UPDATE,DELETE,INSERT ON mysql.user TO luke@localhost;
    Query OK, 0 rows affected (0.00 sec)
    在執(zhí)行完上述授權操作之后,我們再查看一下賬戶luke的權限:


    MariaDB [(none)]>  SHOW GRANTS FOR luke@localhost;
    +-------------------------------------------------------------------------------------------------------------+
    | Grants for luke@localhost |
    +-------------------------------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'luke'@'localhost' IDENTIFIED BY PASSWORD '*55D9962586BE75F4B7D421E6655973DB07D6869F' |
    | GRANT SELECT, INSERT, UPDATE, DELETE ON `mysql`.`user` TO 'luke'@'localhost' |
    +-------------------------------------------------------------------------------------------------------------+
    2 rows in set (0.00 sec)

上面輸出信息中顯示賬戶luke已經擁有了針對mysql數據庫中user表單的一系列權限了。這時我們再切換到賬戶luke,此時就能夠看到mysql數據庫了,而且還能看到表單user(其余表單會因無權限而被繼續(xù)隱藏):

    [root@linuxprobe ~]# mysql -u luke -p
    Enter password:此處輸入luke用戶在數據庫中的密碼
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    +--------------------+
    2 rows in set (0.01 sec)
    MariaDB [(none)]> use mysql
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    MariaDB [mysql]> SHOW TABLES;
    +-----------------+
    | Tables_in_mysql |
    +-----------------+
    | user            |
    +-----------------+
    1 row in set (0.01 sec)
    MariaDB [mysql]> exit
    Bye

大家不要心急,我們接下來會慢慢學習數據庫內容的修改方法。當前,先切換回root賬戶,移除剛才的授權。

    [root@linuxprobe ~]# mysql -u root -p
    Enter password:此處輸入root管理員在數據庫中的密碼
    MariaDB [(none)]> use mysql;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    MariaDB [(none)]> REVOKE SELECT,UPDATE,DELETE,INSERT ON mysql.user FROM luke@localhost;
    Query OK, 0 rows affected (0.00 sec)

可以看到,除了移除授權的命令(revoke)與授權命令(grant)不同之外,其余部分都是一致的。這不僅好記而且也容易理解。執(zhí)行移除授權命令后,再來查看賬戶luke的信息:

    MariaDB [(none)]> SHOW GRANTS FOR luke@localhost;
    +-------------------------------------------------------------------------------------------------------------+
    | Grants for luke@localhost |
    +-------------------------------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'luke'@'localhost' IDENTIFIED BY PASSWORD '*55D9962586BE75F4B7D421E6655973DB07D6869F' |
    +-------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群。

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號