日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MySql学习19-----用户管理

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySql学习19-----用户管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySql是一個多用戶數據庫,具有功能強大的訪問控制系統,可以為不同用戶指定允許的權限。MySql用戶可以分為普通用戶和root用戶。root用戶是超級管理員,擁有所有權限,包括創建用戶、刪除用戶和修改用戶的密碼等管理權限;普通用戶只擁有被授予的各種權限。用戶管理包括管理用戶賬戶、權限等。

一. 權限表

MySql服務器通過權限表來控制用戶對數據庫的訪問,權限表存放在MySql數據庫中,由MySql_install_db腳本初始化。存儲賬戶權限信息表主要有:user、db、host、tables_priv、columns_priv和procs_priv。比如,下面以user表為例:

user表是MySql中最重要的一個權限表,記錄允許連接到服務器的賬號信息,里面的權限是全局級的。比如:一個用戶在user表中被賦予了DELETE權限,則該用戶可以刪除MySql服務器上所有數據庫中的任何記錄。

1 mysql> desc user; 2 +------------------------+-----------------------------------+------+-----+-----------------------+-------+ 3 | Field | Type | Null | Key | Default | Extra | 4 +------------------------+-----------------------------------+------+-----+-----------------------+-------+ 5 | Host | char(60) | NO | PRI | | | 6 | User | char(32) | NO | PRI | | | 7 | Select_priv | enum('N','Y') | NO | | N | | 8 | Insert_priv | enum('N','Y') | NO | | N | | 9 | Update_priv | enum('N','Y') | NO | | N | | 10 | Delete_priv | enum('N','Y') | NO | | N | | 11 | Create_priv | enum('N','Y') | NO | | N | | 12 | Drop_priv | enum('N','Y') | NO | | N | | 13 | Reload_priv | enum('N','Y') | NO | | N | | 14 | Shutdown_priv | enum('N','Y') | NO | | N | | 15 | Process_priv | enum('N','Y') | NO | | N | | 16 | File_priv | enum('N','Y') | NO | | N | | 17 | Grant_priv | enum('N','Y') | NO | | N | | 18 | References_priv | enum('N','Y') | NO | | N | | 19 | Index_priv | enum('N','Y') | NO | | N | | 20 | Alter_priv | enum('N','Y') | NO | | N | | 21 | Show_db_priv | enum('N','Y') | NO | | N | | 22 | Super_priv | enum('N','Y') | NO | | N | | 23 | Create_tmp_table_priv | enum('N','Y') | NO | | N | | 24 | Lock_tables_priv | enum('N','Y') | NO | | N | | 25 | Execute_priv | enum('N','Y') | NO | | N | | 26 | Repl_slave_priv | enum('N','Y') | NO | | N | | 27 | Repl_client_priv | enum('N','Y') | NO | | N | | 28 | Create_view_priv | enum('N','Y') | NO | | N | | 29 | Show_view_priv | enum('N','Y') | NO | | N | | 30 | Create_routine_priv | enum('N','Y') | NO | | N | | 31 | Alter_routine_priv | enum('N','Y') | NO | | N | | 32 | Create_user_priv | enum('N','Y') | NO | | N | | 33 | Event_priv | enum('N','Y') | NO | | N | | 34 | Trigger_priv | enum('N','Y') | NO | | N | | 35 | Create_tablespace_priv | enum('N','Y') | NO | | N | | 36 | ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | | 37 | ssl_cipher | blob | NO | | NULL | | 38 | x509_issuer | blob | NO | | NULL | | 39 | x509_subject | blob | NO | | NULL | | 40 | max_questions | int(11) unsigned | NO | | 0 | | 41 | max_updates | int(11) unsigned | NO | | 0 | | 42 | max_connections | int(11) unsigned | NO | | 0 | | 43 | max_user_connections | int(11) unsigned | NO | | 0 | | 44 | plugin | char(64) | NO | | mysql_native_password | | 45 | authentication_string | text | YES | | NULL | | 46 | password_expired | enum('N','Y') | NO | | N | | 47 | password_last_changed | timestamp | YES | | NULL | | 48 | password_lifetime | smallint(5) unsigned | YES | | NULL | | 49 | account_locked | enum('N','Y') | NO | | N | | 50 +------------------------+-----------------------------------+------+-----+-----------------------+-------+ 51 45 rows in set (0.00 sec) View Code

user表有45個字段,如上面所示。這些字段可以分為4類,分別是用戶列、權限列、安全列和資源控制列。

(1)用戶列:比如Host、User。

(2)權限列:user表中對應的權限是針對所有用戶數據庫的。這些字段值的類型為ENUM??梢匀〉弥抵荒苁荵和N。Y表示該用戶有對應的權限,N表示沒有。

(3)安全列:安全列只有6個字段,其中兩個是ssl相關的,兩個是x509相關的,另外兩個是授權插件相關的。

(4)資源控制列:資源控制列的字段使用來限制用戶使用的資源。比如:

? ? ? ? ?max_questions:用戶每小時允許執行的查詢操作次數。

二. 賬戶管理

mysql的客戶端連接是以用戶名來登錄服務端。

服務端可以對用戶的權限來進行更改,所以每個用戶對數據庫或對數據表的權限都是不一樣的。

一般來說不應該使用root用戶登錄,因為root用戶擁有最高的權限,可以進行刪除數據庫等“危險”操作。為了安全,應該使用其他用戶登錄,并且給他分配合適的權限。

并且用戶應該是有密碼的,使用匿名用戶(沒有密碼)是非常危險的,如果這個匿名用戶又是開放遠程登錄的話那別人只要檢測到你的端口是開放的就可以登錄你的mysql了。

2.1 登陸和退出MySql服務器

MySql命令常用參數如下:

(1)-h主機名,可以使用該參數指定主機名或ip,如果不指定,默認是localhost。

(2)-u用戶名,可以使用該參數指定用戶名。

(3)-p密碼,可以使用該參數指定登陸密碼。如果該參數后面有一段字段,則該字段字符串將作為用戶的密碼直接登陸。如果后面沒有內容,則登陸的時候會提示輸入密碼。注意:該參數后面的字符串和-p之前不能有空格。

(4)-P端口號,該參數后面接MySql服務器的端口號,默認為3306。

(5)數據庫名,可以在命令的最后指定數據庫名。

(6)-e執行SQL語句。如果指定了該參數,將在登陸后執行-e后面的命令或SQL語句并退出

舉例:使用Hermioner用戶登陸到本地MySql服務器的mytest數據庫中,同時執行一條查詢語句。

1 C:\Users\Hermioner>mysql -h localhost -u Hermioner -p mytest -e "desc account;" 2 Enter password: ********* 3 +-------+-------------+------+-----+---------+----------------+ 4 | Field | Type | Null | Key | Default | Extra | 5 +-------+-------------+------+-----+---------+----------------+ 6 | id | int(11) | NO | PRI | NULL | auto_increment | 7 | name | varchar(40) | YES | | NULL | | 8 | money | double | YES | | NULL | | 9 +-------+-------------+------+-----+---------+----------------+ View Code

exit命令可以直接退出。

2.2 新建用戶

創建新用戶,必須有相應的權限來執行創建操作。在MySql數據庫中,有兩種方式創建新用戶:一種是使用CREATE USER或GRANT語句;另一種是直接操作MYSQL授權表。最好的辦法是使用GRANT語句,因為這樣更加精確,錯誤少。

  • 方式1:create user 用戶名@可登錄地址 identified by '密碼';
    • 沒有可登錄地址代表所有地址都能登錄
    • 如果只允許本地登錄,應該設置成localhost
  • 方式2:grant 權限 on 數據庫.數據表 to 用戶名@可登錄地址 identified by '密碼';
  • 方式3:可以使用Insert直接往user表中插入數據,但不建議使用。

note:create user語句創建的新用戶沒有任何權限,還需要使用grant語句賦予用戶權限。而grant語句不僅可以創建新用戶,還可以在創建的同時對用戶授權。

note:一般情況下,最好使用GRANT或者CREATE USER語句,而不要直接將用戶信息插入user表。因為user表中存儲了全局級別的權限以及其他的賬戶信息,如果意外破壞了user表中的記錄,則可能會對MYSQL服務器造成很大影響。

2.2 撤銷權限+重新授權

如果此時發現剛剛給的權限太大了,如果我們只是想授予它在某個數據庫上的權限,那么需要切換到root 用戶撤銷剛才的權限,重新授權:

1 2 REVOKE ALL?PRIVILEGES?ON?*.* FROM?'username'@'localhost'; GRANT?ALL?PRIVILEGES?ON?mytest.* TO?'username'@'localhost'?IDENTIFIED BY?'password';

甚至還可以指定該用戶只能執行 select 和 update 命令:

1 GRANT?SELECT, UPDATE?ON?mytest.* TO?'username'@'localhost'?IDENTIFIED BY?'password';

這樣一來,再次以username登陸 MySQL,只有mytest數據庫是對其可見的,并且如果你只授權它select權限,那么它就不能執行delete 語句。

另外每當調整權限后,通常需要執行以下語句刷新權限

1 FLUSH PRIVILEGES;

也可以通過show grants命令查看權限授予執行的命令:

show grants for 'zhangsan';

2.4 修改密碼

(1)root用戶修改自己的密碼

使用MySqladmin命令

mysqladmin -u username -h localhost -p password "newpwd"

(2)root用戶修改普通用戶的密碼

GRANT USAGE ON *.* TO 'someuser'@'%' IDENTIFIED BY 'somepassword';

比如:使用Grant語句將Hermioner用戶的密碼修改為”123“

GRANT USAGE ON *.* TO 'Hermioner'@'localhost' IDENTIFIED BY '123';

(3)普通用戶修改密碼

普通用戶登陸MySql服務器后,通過SET語句設置自己的密碼

SET PASSWORD=PASSWORD(''newpassword'');

note: 其實上面三種方式都可以采用set方法來修改。知識選擇了每一種情況下更加適合的方式介紹。比如,還可以通過操作user表中的字段進行修改。

2.5 密碼丟失解決

這種情況分為兩種

  • 通過圖形界面已經進入mysql,但是忘記了原來的密碼
  • 根本就進不去mysql,原來的密碼也忘記了
  • 下面根據這兩個種情況 分別進行處理

    情況一:
    使用set password 命令

    set password for ‘root’@’localhost’ = password(‘hhhh’); -- 即hhhh為新密碼

    使用update命令

    首先進入 mysql數據庫,執行下面的三條語句

    use mysql;

    update user set password = password('hhhh');

    flush privileges; --tiger 即為新密碼

    情況二:
    ?

    ??1、更改相應的配置文件

    Windows ----> 找到my.ini 文件

    Linux ?----> 找到配置文件 my.cnf 文件

    ?

    找到在?[mysqld]?下添加skip-grant-tables,然后保存并退出

    ?

    window下 如圖

    ?

    Linux下 如圖

    ?

    2、重啟mysql服務:

    Linux: service mysqld restart

    window:

    ????net stop mysql ?-- 停止服務

    ????net start mysql ?-- 開啟服務

    3、修改root用戶密碼 ,進入cmd中 輸入 mysql后 輸入下面的語句

    MySQL> UPDATE mysql.user SET Password=PASSWORD('新密碼') where USER='root';
    MySQL> flush privileges;
    MySQL> exit

    4、再去把配置文件中的?skip-grant-tables注釋掉(如圖),然后重啟mysql(見步驟2)

    5、退出?即可用新密碼登錄

    2.6 刪除賬戶

    • drop user 用戶名;
    • 在mysql5.0之前drop user命令只會刪除用戶,而不刪除權限,在5.0之前需要先用revoke刪除權限。

    2.7 查看當前用的數據庫和查看當前的用戶

    ? ?select database();

    ? ?select user();

    ?2.8 匿名賬戶

    ?

    Question:已經將一個賬戶的信息從數據庫中完全刪除,為什么該用戶還能登陸?

    Answer:出現這種情況的原因可能有多種。最有可能的是在user數據表中存在匿名賬戶。在user表中匿名賬戶的User字段值為空字符串,這會允許任何人連接到數據庫,檢測是否存在匿名登陸用戶的方法是,輸入以下語句:

    select *from user where User=' ';

    如果有記錄返回,則說明存在匿名用戶,需要刪除該記錄,以保證數據庫的訪問安全,刪除語句為:

    delete from user where user=' ';

    這樣一來,該賬戶肯定不能登陸MySql服務器了。

    ?

    轉載于:https://www.cnblogs.com/Hermioner/p/10409582.html

    總結

    以上是生活随笔為你收集整理的MySql学习19-----用户管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。