官术网_书友最值得收藏!

6.1 賬戶管理

用戶擁有一個登錄賬號是使用MySQL的基礎,本節就將介紹如何設置MySQL用戶賬號及其權限。

6.1.1 創建新賬號

首先來看如何新建一個MySQL用戶賬號,以及授予其權限。MySQL可以使用GRANT命令語句來完成這一功能:

    GRANT privileges [(columns)]
    ON what
    TO user IDENTIFIED BY "password"
    WITH GRANT OPTION

參數說明:

● privileges:分配給用戶的權限。表6-1列出了可在GRANT語句中使用的權限,及其代表的意義:

表6-1 GRANT命令可授予的用戶權限列表

● columns:所授予權限所適用的列,可選,用來設置列級專有權限。如果多于一個列,則可用逗號將其分開。

● what:所授予權限的應用范圍,包括全局的(“*.*”,適用于所有數據庫和所有的表)、數據庫專有的(“db_name.*”,適用于某個數據庫中的所有表),以及表(“db_name.table_name”,適用于某個表)專有的。如果想更進一步指定權限適用的列,可以通過COLUMNS子句指定。

● user:授予權限的用戶,由用戶名和主機名組成,如user_name@host_name。即不單指定誰進行連接,還要指定從網絡的哪個位置進行連接,MySQL支持多個同名、從不同位置連接的用戶。

● password:用戶口令,可選。如果不給新用戶指定IDENTIFIED BY子句,該用戶不分配口令。對于已有的用戶,指定的口令將替代舊口令;如果不指定新口令,用戶的舊口令仍然保持不變。當使用IDENTIFIED BY時,GRANT會自動對口令進行加密。

● WITH GRANT OPTION:可選。如果包含該子句,該用戶可以將自身的權限授予其他用戶。

例如下面的命令將建立一個新的用戶newuser1@localhost,并授予其在數據庫student_course上所有操作權。

    GRANT ALL ON student_course TO newuser1@localhost IDENTIFIED BY "password"

下面的命令授予newuser2@localhost在表student_course.students上的修改和刪除權。

    GRANT UPDATE DELETE ON student_course.students TO newuser2@localhost IDENTIFIED BY
"password"

此時,如果使用newuser2登錄,則只能看到student_course中的students表,如果試圖查詢表中的數據,則會報錯:

    %mysql -u newuser2 -p
    Enter password: ********
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8 to server version: 4.0.14-max-debug
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql> use student_course;
    Database changed
    mysql> show tables;
    +----------------------------------------+
    | Tables_in_student_course     |
    +----------------------------------------+
    | students                 |
    +----------------------------------------+
    1 row in set (0.00 sec)
    mysql> select * from students;
    ERROR 1142: select command denied to user: 'newuser2@localhost' for table 'students'
    mysql>

若想再進一步細化權利范圍,比如限定newuser2@localhost只能修改students表中的sname列,命令如下:

        GRANT UPDATE(sname) ON student_course.students TO newuser2@localhost IDENTIFIED BY
"password"

6.1.2 控制權限傳遞

上面介紹了如何創建一個用戶及對其授權,可用WITH GRANT OPTION子句來控制權限的傳遞。例如,如果要讓tom能從host1進行連接并管理sales數據庫中所有表,并能夠將這個權限傳遞給其他用戶,應使用下列GRANT語句:

    GRANT ALL ON student_courses.*
    TO tom@host1 IDENTIFIED BY "password"
    WITH GRANT OPTION

WITH GRANT OPTION子句允許將用戶的權限授予給另一個用戶,具有GRANT權限的兩個用戶可以相互授予自己的權限。如果只給一個用戶授予SELECT權限,而給另一個用戶除SELECT外還授予了其的權限,則第二個用戶可以通過權限傳遞,使第一個用戶更加“強大”。

6.1.3 取消權限和刪除用戶

為了收回某個用戶的權限,可使用REVOKE語句。除了要用FROM替換TO,并且沒有IDENTIFIED BY或WITH GRANT OPTION子句外,REVOKE的語法與GRANT語句非常相似:

    REVOKE privileges (columns) ON what FROM user

其中,user為想要取消權限的用戶名,privileges為想要取消的權限。例如,下面命令取消newuser1的所有權限:

    mysql> REVOKE ALL ON student_course FROM newuser1@localhost;

REVOKE語句只刪除權限,而不刪除用戶。即使取消了該用戶的所有權限,用戶仍然保留在系統(user表)中,這意味著該用戶仍然可連接服務器。要想刪除整個用戶,必須用DELETE語句將該用戶的記錄從user表中直接刪除:

    DELETE FROM user WHERE User="username" and Host="hostname";

例如,下面命令刪除newuser1@localhost用戶:

    mysql> use mysql
    Database changed
    mysql> DELETE FROM user
        -> WHERE User="newuser1" and Host="localhost";
    mysql> FLUSH PRIVILEGES;

其中,DELETE語句刪除該用戶,FLUSH語句告訴服務器重新加載授權表。

6.1.4 了解MySQL的用戶管理表

前面兩節介紹了如何使用GRANT和REVOKE來管理用戶和權限,作為MySQL管理員,應該更進一步了解MySQL的用戶和權限管理表。MySQL把用戶和權限信息保存在一個叫做mysql數據庫中。該數據庫至少包含了四個表,如表6-2所示。

表6-2 MySQL的用戶權限表

GRANT和REVOKE語句影響上面四個表,當通過GRANT為用戶授權時,MySQL在user表中為該用戶創建一個項。

● 如果GRANT語句授予用戶所有全局權限,則這些權限也記錄在user表中。

● 如果GRANT語句只授予該用戶數據庫、表或列上的權限,則這些權限將被分別記錄在db、tables_priv和columns_priv表中。

使用GRANT和REVOKE語句比直接修改授權表更容易。例如,下面的命令通過update命令直接修改user表,來更改root用戶的密碼:

    % mysql -u root mysql
    % UPDATE user SET
        password=password('new_password')
        where user='root';
    % FLUSH PRIVILEGES
主站蜘蛛池模板: 朝阳市| 朝阳县| 会理县| 洛阳市| 罗源县| 汉源县| 武平县| 雅安市| 胶州市| 连州市| 伊吾县| 丰县| 洛阳市| 灯塔市| 滨州市| 星子县| 丰城市| 拜泉县| 三明市| 望奎县| 包头市| 嘉荫县| 湘阴县| 岫岩| 米泉市| 九龙县| 象山县| 麦盖提县| 区。| 秭归县| 宜兴市| 闸北区| 从江县| 如东县| 德格县| 静乐县| 望城县| 南宫市| 墨玉县| 武安市| 凉城县|