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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

MySql的用户权限

發(fā)布時(shí)間:2023/11/29 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySql的用户权限 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用戶管理

MySQL數(shù)據(jù)庫(kù)中的表與其他任何關(guān)系表沒有區(qū)別,都可以通過典型的SQL命令修改其結(jié)構(gòu)和數(shù)據(jù)。可以使用GRANT和REVOKE命令。通過這些命令,可以創(chuàng)建和禁用用戶,可以在線授予和撤回用戶訪問權(quán)限。在5.0版本中增加了兩個(gè)新命令:CREATE USER和DROP USER。從而能更容易地增加新用戶、刪除和重命名用戶,還增加了第三個(gè)命令RENAME USER用于重命名現(xiàn)有的用戶。

使用CREATE USER命令創(chuàng)建用戶

CREATE USER用于創(chuàng)建新的MySQL賬戶。要使用CREATE USER語(yǔ)句,您必須擁有mysql數(shù)據(jù)庫(kù)的全局CREATE USER權(quán)限,或擁有INSERT權(quán)限。對(duì)于每個(gè)賬戶,CREATE USER會(huì)在沒有權(quán)限的mysql.user表中創(chuàng)建一條新記錄。如果賬戶已經(jīng)存在,則出現(xiàn)錯(cuò)誤。使用自選的IDENTIFIED BY子句,'可以為賬戶設(shè)置一個(gè)密碼。user和密碼的設(shè)置方法與GRANT語(yǔ)句一樣。其命令的原型如下:

CREATE USER user [IDENTIFIED BY [PASSWORD 'PASSWORD']?[,user [IDENTIFIED BY [PASSWORD'PASSWORD']]……

create user temp identified by '123456';

使用DROP USER命令刪除用戶

如果存在一個(gè)或是多個(gè)賬戶被閑置,應(yīng)當(dāng)考慮將其刪除,確保不會(huì)用于可能的違法活動(dòng)。利用DROP USER命令就能很容易地從權(quán)限表中刪除用戶的所有信息,即來自所有授權(quán)表的賬戶權(quán)限記錄。DROP USER命令原型如下:

DROP USER user [,user] ……

ps"DROP USER不能自動(dòng)關(guān)閉任何打開的用戶對(duì)話;而且,如果用戶有打開的對(duì)話,此時(shí)取消用戶,則命令不會(huì)生效,直到用戶對(duì)話被關(guān)閉后才生效。一旦對(duì)話被關(guān)閉,用戶也被取消,此用戶再次試圖登錄時(shí)將會(huì)失敗。

使用RENAME USER命令重命名用戶

RENAMEUSER語(yǔ)句用于對(duì)原有MySQL賬戶進(jìn)行重命名。RENAMEUSER語(yǔ)句的命令原型如下:

RENAME USER old_user TO new_user?[,old_user TO new_user] ……

ps:如果舊賬戶不存在或者新賬戶已存在,則會(huì)出現(xiàn)錯(cuò)誤。

權(quán)限管理

GRANT和REVOKE命令

GRANT和REVOKE命令用來管理訪問權(quán)限,也可以用來創(chuàng)建和刪除用戶,但在MySQL5.0.2中可以利用CREATE USER和DROP USER命令更容易地實(shí)現(xiàn)這些任務(wù)。GRANT和REVOKE命令對(duì)于誰(shuí)可以操作服務(wù)器及其內(nèi)容的各個(gè)方面提供了多程度的控制,從誰(shuí)可以關(guān)閉服務(wù)器,到誰(shuí)可以修改特定表字段中的信息都能控制。

如果授權(quán)表?yè)碛泻衜ixed-case數(shù)據(jù)庫(kù)或表名稱的權(quán)限記錄,并且lower_case_table_names系統(tǒng)變量已設(shè)置,則不能使用REVOKE撤銷權(quán)限,必須直接操縱授權(quán)表。(當(dāng)lower_case_table_names已設(shè)置時(shí),GRANT將不會(huì)創(chuàng)建此類記錄,但是此類記錄可能已經(jīng)在設(shè)置變量之前被創(chuàng)建了。)

授予的權(quán)限可以分為多個(gè)層級(jí):

  • 全局層級(jí)適用于一個(gè)給定服務(wù)器中的所有數(shù)據(jù)庫(kù),這些權(quán)限存儲(chǔ)在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤銷全局權(quán)限。
  • 數(shù)據(jù)庫(kù)層級(jí)適用于一個(gè)給定數(shù)據(jù)庫(kù)中的所有目標(biāo),這些權(quán)限存儲(chǔ)在mysql.dbmysql.host表中。GRANT ALL ON db_name .*和REVOKE ALL ON db_name .*只授予和撤銷數(shù)據(jù)庫(kù)權(quán)限。
  • 表層級(jí)適用于一個(gè)給定表中的所有列,這些權(quán)限存儲(chǔ)在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷表權(quán)限。
  • 列層級(jí)適用于一個(gè)給定表中的單一列,這些權(quán)限存儲(chǔ)在mysql.columns_priv表中。當(dāng)使用REVOKE時(shí),您必須指定與被授權(quán)列相同的列。
  • 子程序?qū)蛹?jí),CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT權(quán)限適用于已存儲(chǔ)的子程序,這些權(quán)限可以被授予為全局層級(jí)和數(shù)據(jù)庫(kù)層級(jí);而且,除了CREATE ROUTINE外,這些權(quán)限可以被授予為子程序?qū)蛹?jí),并存儲(chǔ)在mysql.procs_priv表中。 grant all on *.* to user identified by '123456' with grant option; --授予用戶名為user、密碼為123456的用戶使用所有數(shù)據(jù)庫(kù)的所有權(quán)限,并允許他向其他人授予這些權(quán)限。 revoke all privileges,grant from user; grant usage on books.* to user identified by '123456'; --創(chuàng)建一個(gè)沒有任何權(quán)限的常規(guī)用戶 grant select,insert,update,delete,index,alter,create,drop on books.* to user; --為用戶user授予適當(dāng)?shù)臋?quán)限 revoke alter,create,drop on books.* from user; --減少權(quán)限 revoke all on books.* from user; --撤銷所有的權(quán)限
  • ps:當(dāng)用戶使用GRANT和REVOKE命令更改用戶權(quán)限后,退出MySQL系統(tǒng),用戶使用新賬戶名登錄MySQL的時(shí)候,可能會(huì)因?yàn)闆]有刷新用戶授權(quán)表而導(dǎo)致登錄錯(cuò)誤。這是因?yàn)樵谟脩粼O(shè)置完賬號(hào)后,只有重新加載授權(quán)表才能使之前設(shè)置的授權(quán)表生效。使用FLUSH PRIVILEGES命令可以重載授權(quán)表。另外,需要注意的是,只有如“root”這樣擁有全部權(quán)限的用戶才可以執(zhí)行此命令。當(dāng)用戶重載授權(quán)表后,退出MySQL后,使用新創(chuàng)建的用戶名即可正常登錄MySQL。

    MySQL數(shù)據(jù)庫(kù)安全技術(shù)的常見問題

    權(quán)限更改何時(shí)生效

    MySQL服務(wù)器啟動(dòng)的時(shí)候以及使用GRANT和REVOKE語(yǔ)句的時(shí)候,服務(wù)器會(huì)自動(dòng)讀取grant表。但是,既然我們知道這些權(quán)限保存在什么地方以及它們是如何保存的,就可以手動(dòng)修改它們。當(dāng)手動(dòng)更新它們的時(shí)候,MySQL服務(wù)器將不會(huì)注意到它們已經(jīng)被修改了。

    我們必須向服務(wù)器指出已經(jīng)對(duì)權(quán)限進(jìn)行了修改,有3種方法可以實(shí)現(xiàn)了這個(gè)任務(wù)。可以在MySQL命令提示符下(必須以管理員的身份登錄進(jìn)入)鍵入如下命令:

    flush privileges;

    mysqladmin flush-privileges

    mysqladmin reload

    此后,當(dāng)用戶下次再連接的時(shí)候,系統(tǒng)將檢查全局級(jí)別權(quán)限;當(dāng)下一個(gè)命令被執(zhí)行時(shí),將檢查數(shù)據(jù)庫(kù)級(jí)別的權(quán)限;而表級(jí)別和列級(jí)別權(quán)限將在用戶下次請(qǐng)求的時(shí)候被檢查。

    設(shè)置賬戶密碼

    (1)可以用mysqladmin命令在命令行指定密碼:

    mysqladmin -u user_name -h host_name password "newpwd"

    mysqladmin -u root?password?"newpass" mysqladmin -u root?password?oldpass?"newpass"

    mysqladmin命令重設(shè)服務(wù)器為host_name,且用戶名為user_name的用戶的密碼,新密碼為“newpwd”。

    (2)通過set password命令設(shè)置用戶的密碼:

    set password for 'jeffrey'@'localhost'=password('biscuit');

    只有以root用戶(可以更新mysql數(shù)據(jù)庫(kù)的用戶)身份登錄,才可以更改其他用戶的密碼。如果你沒有以匿名用戶連接,省略for子句便可以更改自己的密碼:

    set password=password('biscuit');

    (3)在全局級(jí)別下使用GRANT USAGE語(yǔ)句(在*.*)指定某個(gè)賬戶的密碼,而不影響賬戶當(dāng)前的權(quán)限:

    GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'biscuit';

    (4)在創(chuàng)建新賬戶時(shí)建立密碼,要為password列提供一個(gè)具體值:

    mysql -uroot -p mysql ?--制定use mysql數(shù)據(jù)庫(kù)

    INSERT INTO user(Host, User, Password)VALUES('localhost','jeffrey',PASSWORD('biscuit'));

    FLUSH PRIVILEGES;

    (5)更改已有賬戶的密碼,要應(yīng)用UPDATE語(yǔ)句來設(shè)置password列值:

    mysql -uroot -p mysql

    UPDATE user SET Password=PASSWORD('bagel')WHERE Host='localhost' AND User='francis';

    FLUSH PRIVILEGES;

    ps:

  • 當(dāng)使用SET PASSWORD、INSERT或者UPDATE指定賬戶的密碼時(shí),必須用PASSWORD()函數(shù)對(duì)它進(jìn)行加密。(唯一的特例是如果密碼為空,則不需要使用PASSWORD())。之所以使用PASSWORD()是因?yàn)閡ser表以加密方式保存密碼,而不是明文。如果采用沒有進(jìn)行加密的方式設(shè)置密碼,連接使用的密碼值將被加密,并同保存在user表中的密碼進(jìn)行比較。但是,保存的值為明文,因此比較將失敗,服務(wù)器拒絕連接。
  • 如果使用GRANT……IDENTIFIED BY語(yǔ)句或mysqladmin password命令設(shè)置密碼,它們均會(huì)自動(dòng)加密密碼。在這種情況下,不需要使用PASSWORD()函數(shù)對(duì)密碼進(jìn)行加密。
  • 使密碼更安全

    (1)在管理級(jí)別,切忌不能將mysql.user表的訪問權(quán)限授予任何非管理賬戶。

    (2)采用下面的命令模式來連接服務(wù)器,以此來隱藏你的密碼。命令如下:

    mysql -uroot -p db_name

    Enter password:********

    “*”字符指定輸入密碼的地方,輸入的密碼是不可見的。因?yàn)樗鼘?duì)其他用戶不可見,與在命令行上指定它相比,這樣進(jìn)入你的密碼更安全。

    (3)如果想要從非交互式方式下運(yùn)行一個(gè)腳本調(diào)用一個(gè)客戶端,就沒有從終端輸入密碼的機(jī)會(huì)。其最安全的方法是讓客戶端程序提示輸入密碼或在適當(dāng)保護(hù)的選項(xiàng)文件中指定密碼。

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/wade-luffy/p/6046590.html

    總結(jié)

    以上是生活随笔為你收集整理的MySql的用户权限的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。