仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 863|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL教程之MySQL的用户设置与受权

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:12:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在我们工作的过程中,经常能听到很多不使用MySQL的理由,虽然其中有一些是对MySQL的误解,不过同样也有一些是合情合理的。择要:本文先容了怎样创建用户,怎样为用户分派权限。GRANT语句固然可以为用户分派权限,利用对照便利,可是从平安角度,从增添对体系懂得角度,你应当只管利用间接修正受权表的办法。如许能够更准确的把持受权,可以对受权表完整懂得,制止由于GRANT语句的毛病,是MySQL服务器的平安性下降。
你能够有2个分歧的办法增添用户:经由过程利用GRANT语句或经由过程间接操纵MySQL受权表。对照好的办法是利用GRANT语句,由于他们是更简明而且仿佛毛病少些。
利用SHOWGRANTS语句显现用户的受权
你能够间接检察受权表,也能够利用SHOWGRANTS语句检察某个用户的受权,这类情形下利用SHOWGRANTS语句明显要便利一些。
语法:SHOWGRANTSFORuser_name
为了包容对恣意主机的用户授与的权力,MySQL撑持以user@host格局指定user_name值。
比方,上面的语句显现一个用户admin的权限:
mysql>SHOWGRANTSFORadmin@localhost;
其了局为创立该用户的GRNAT受权语句:
GRANTRELOAD,SHUTDOWN,PROCESSON*.*TOadmin@localhostIDENTIFIEDBYPASSWord28e89ebc62d6e19a
暗码是加密后的情势。
利用GRANT语句创立用户并受权
GRANT语句的语法
GRANTpriv_type(columns)
ONwhat
TOuserIDENTIFIEDBY“password”
WITHGRANTOPTION

要利用该语句,必要填写以下部分:
・priv_type分派给用户的权限。
priv_type能够指定以下的任何一个:
ALLPRIVILEGESFILERELOAD
ALTERINDEXSELECT
CREATEINSERTSHUTDOWN
DELETEPROCESSUPDATE
DROPREFERENCESUSAGE
ALL是ALLPRIVILEGES的一个同义词,REFERENCES还没被完成,USAGE以后是“没有权限”的一个同义词。它能用在你想要创立一个没有权限用户的时分。
关于表,你能指定的独一priv_type值是SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT、INDEX和ALTER。
关于列,你能指定的独一priv_type值是(即,当你利用一个column_list子句时)是SELECT、INSERT和UPDATE。
・columns权限合用的列。
这是可选的,只来设置列专有的权限。假如定名多于一个列,则用逗号分隔。
・what权限使用的级别
GRANT同意体系主管在4个权限级别上受权MySQL用户的权力:
・全局级别
全局权限感化于一个给定服务器上的一切数据库。这些权限存储在mysql.user表中。你能经由过程利用ON*.*语法设置全局权限
・数据库级别
数据库权限感化于一个给定命据库的一切表。这些权限存储在mysql.db和mysql.host表中。你能经由过程利用ONdb_name.*语法设置数据库权限。假如你指定ON*而且你有一个以后数据库,你将为该数据库设置权限。(告诫:假如你指定ON*而你没有一个以后数据库,你将影响全局权限!)
・表级别
表权限感化于一个给定表的一切列。这些权限存储在mysql.tables_priv表中。你能透过ONtbl_name,为详细的表名设置权限。
・列级别
列权限感化于在一个给定表的单个列。这些权限存储在mysql.columns_priv表中。你能够经由过程指定一个columns子句将权限授与特定的列,同时要在ON子句中指定详细的表。
对与一个表或列的权限是由4个权限级其余逻辑或构成的。比方,假如mysql.user表指定一个用户有一个全局select权限,它不克不及被数据库、表或列的一个条目否定。
关于一个列的权限能以下盘算:
globalprivileges
OR(databaseprivilegesANDhostprivileges)
ORtableprivileges
ORcolumnprivileges

在年夜多半情形下,你只授与用户一个权限级别上的权限,因而实际一般不象下面所说的那样庞大。
user利用权限的用户。
为了包容对恣意主机的用户授与的权力,MySQL撑持以user@host格局指定user_name值。假如你想要指定一个特别字符的一个user字符串(比方“-”),或一个包括特别字符或通配符的host字符串(比方“%”),你能够用括号括起能用户或主机名字(比方,test-user@test-hostname)。
你能在主机名中指定通配符。比方,user@"%.loc.gov"合用于在loc.gov域中任何主机的user,而且user@"144.155.166.%"合用于在144.155.166类C子网中任何主机的user。
复杂情势的user是user@"%"的一个同义词。注重:假如你同意匿名用户毗连MySQL服务器(它是缺省的),你也应当增添一切当地用户如user@localhost,由于不然,当用户试图从当地呆板上登录到MySQL服务器时,关于mysql.user表中的当地主机的匿名用户条目将被利用!匿名用户经由过程拔出有User=的条目到mysql.user表中来界说。经由过程实行这个查询,你能够查验它是不是感化于你:
mysql>SELECTHost,UserFROMmysql.userWHEREUser=;
・password分派给该用户的口令。这也是可选的。
在MySQL3.22.12或今后,假如创立一个新用户或假如你有全局授与权限,用户的口令将被设置为由IDENTIFIEDBY子句指定的口令,假如给出一个。假如用户已有了一个口令,它被一个新的取代。
告诫:假如你制造一个新用户可是不指定一个IDENTIFIEDBY子句,用户没有口令。这是不平安的。
・WITHGRANTOPTION子句是可选的。
WITHGRANTOPTION子句授与用户有授与其他用户在指定的权限程度上的任何权限的才能。你应当审慎看待你授与他grant权限的用户,由于具有分歧权限的两个用户大概能兼并权限!
创立用户并受权的实例
创立一个具有超等用户权力的用户:
mysql>GRANTALLON*.*TOanyname@localhostIDENTIFIEDBY"passwd"->WITHGRANTOPTION
该语句将在user表中为anyname@localhost创立一个纪录,翻开一切权限。
数据库级权限用一个ONdb_name.*子句而不是ON*.*举行受权:
mysql>GRANTALLONsample.*TOboris@localhostIDENTIFIEDBY"ruby"
这些权限不是全局的,以是它们不存储在user表中,我们仍旧必要在user表中创立一笔记录(使得用户能毗连),但我们也必要创立一个db表纪录纪录数据库集的权限。
间接修正受权表创立用户并受权
假如你还记得后面的先容,你应当能即便不必GRANT语句也能做GRANT做的事变。记着在你间接修正受权表时,你将关照服务重视载受权表,不然他不晓得你的改动。你能够实行一个mysqladminflush-privileges或mysqladminreload命令和FLUSHPRIVILEGES语句强制一个重载。假如你健忘做这个,你会困惑为何服务器不做你想做的事变。
以下GRANT语句创立一个具有一切权的超等用户。包含受权给他人的才能:
GRANTALLON*.*TOanyname@localhostIDENTIFIEDBY"passwd"WITHGRANTOPTION
该语句将在user表中为anyname@localhost创立一个纪录,翻开一切权限,由于这里是超等用户(全局)权限存储的中央,要用INSERT语句做一样的事变,语句是:
INSERTINTOuserVALUES("localhost","anyname",PASSWORD("passwd"),
"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y")
你大概发明它不事情,这要看你的MySQL版本。受权表的布局已改动并且你在你的user表大概没有14个权限列。用SHOWCOLUMNS找出你的受权表包括的每一个权限列,响应地调剂你的INSERT语句。以下GRANT语句也创立一个具有超等用户身份的用户,可是只要一个单个的权限:
GRANTRELOADON*.*TOflush@localhostIDENTIFIEDBY"flushpass"
本例的INSERT语句比前一个复杂,它很简单列出列名并只指定一个权限列。一切别的列将设置为缺省的"N":
INSERTINTOuser(Host,Password,Reload)VALUES("localhost","flush",PASSWORD("flushpass"),"Y")
数据库级权限用一个ONdb_name.*子句而不是ON*.*举行受权:
GRANTALLONsample.*TOboris@localhostIDENTIFIEDBY"ruby"
这些权限不是全局的,以是它们不存储在user表中,我们仍旧必要在user表中创立一笔记录(使得用户能毗连),但我们也必要创立一个db表纪录纪录数据库集权限:
mysql>INSERTINTOuser(Host,User,Password)
->VALUES("localhost","boris",PASSWORD("ruby"));
mysql>INSERTINTOdbVALUES
->("localhost","sample_db","boris","Y","Y","Y","Y","Y","Y","N","Y","Y","Y");

"N"列是为GRANT权限;对开端的一个数据库级具有WITHGRANTOPTION的GRANT语句,你要设置该列为"Y"。
要设置表级或列级权限,你对tables_priv或columns_priv利用INSERT语句。固然,假如你没有GRANT语句,你将没有这些表,由于它们在MySQL中同时呈现。假如你的确有这些表而且为了某些缘故原由想要手工操纵它们,要晓得你不克不及用独自的列启用权限。
你设置tables_priv.Table_priv或columns_priv.Column_priv列来设置包括你想启用的权限值。比方,要对一个表启用SELECT和INSERT权限,你要在相干的tables_priv的纪录中设置Table_priv为"Select,Insert"。
MySQL部署迅速,因此移植过程不会导致生产中断。而且,较短的学习曲线可以让你的系统管理员迅速掌握它的运行和维护。而且,MySQL的易于维护和管理意味着目前的职员可以处理目前的工作。
再现理想 该用户已被删除
沙发
发表于 2015-1-18 18:33:59 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
若天明 该用户已被删除
板凳
发表于 2015-1-27 05:44:14 | 只看该作者
总感觉自己还是不会SQL
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-5 03:30:14 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
谁可相欹 该用户已被删除
5#
发表于 2015-2-11 03:29:43 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
乐观 该用户已被删除
6#
发表于 2015-3-1 20:38:34 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
兰色精灵 该用户已被删除
7#
发表于 2015-3-10 23:52:52 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
莫相离 该用户已被删除
8#
发表于 2015-3-17 16:14:28 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
因胸联盟 该用户已被删除
9#
发表于 2015-3-24 12:50:51 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-20 00:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表