小女巫 发表于 2015-1-16 20:14:13

发布在MySQL数据库增添新用户权限简介

首先我们要知道,或许有一项技术存在很多理由让我们可以选择使用MySQL学习教程,但是让我们不使用它往往只要有一个理由就足够了。有2个分歧的办法增添用户:经由过程利用GRANT语句或经由过程间接操纵MySQL受权表。对照好的办法是利用GRANT语句,由于他们是更简明而且仿佛毛病少些。
上面的例子显现出怎样利用mysql客户安装新用户。这些例子假定权限依据之前的章节形貌的缺省被安装。这意味着为了改动,你必需在mysqld正在运转统一台呆板上,你必需作为MySQLroot用户毗连,而且root用户必需对mysql数据库有insert权限和reload办理权限。别的,假如你改动了root用户口令,你必需以下的mysql命令指定它。
你能够经由过程收回GRANT语句增添新用户:

shell>mysql--user=rootmysql
mysql>GRANTALLPRIVILEGESON*.*TOmonty@localhost
IDENTIFIEDBYsomethingWITHGRANTOPTION;
mysql>GRANTALLPRIVILEGESON*.*TOmonty@"%"
IDENTIFIEDBYsomethingWITHGRANTOPTION;
mysql>GRANTRELOAD,PROCESSON*.*TOadmin@localhost;
mysql>GRANTUSAGEON*.*TOdummy@localhost;

这些GRANT语句安装3个新用户:
monty
能够从任何中央毗连服务器的一个完整的超等用户,可是必需利用一个口令(something做这个。注重,我们必需对monty@localhost和monty@"%"收回GRANT语句。假如我们增添localhost条目,对localhost的匿名用户条目在我们从当地主机毗连接时由mysql_install_db创立的条目将优先思索,由于它有更特定的Host字段值,以是以user表分列按次看更早到来。
admin
能够从localhost没有一个口令举行毗连而且被授与reload和process办理权限的用户。这同意用户实行mysqladminreload、mysqladminrefresh和mysqladminflush-*命令,另有mysqladminprocesslist。没有授与数据库有关的权限。他们能在今后经由过程收回另外一个GRANT语句受权。
dummy
能够不必一个口令毗连的一个用户,可是只能从当地主机。全局权限被设置为N--USAGE权限范例同意你无需权限便可设置一个用户。它假定你将在今后授与数据库相干的权限。
你也能够间接经由过程收回INSERT语句增添一样的用户存失信息,然后告知服务器再次装进受权表:

shell>mysql--user=rootmysql
mysql>INSERTINTOuserVALUES(localhost,monty,PASSWord(something),
Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y)
mysql>INSERTINTOuserVALUES(%,monty,PASSWORD(something),
Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y)
mysql>INSERTINTOuserSETHost=localhost,User=admin,
Reload_priv=Y,Process_priv=Y;
mysql>INSERTINTOuser(Host,User,Password)
VALUES(localhost,dummy,);
mysql>FLUSHPRIVILEGES;

取决于你的MySQL版本,对上述,你大概必需利用一个分歧数量Y值(在3.22.11之前的版本有更少的权限列)。对admin用户,只用在3.22.11入手下手的版本具有的加倍可读的INSERT扩大的语法。
注重,为了设置一个超等用户,你只需制造一个user表条目,其权限字段设为Y。不必要db或host表的条目。
在user表中的权限列不是由最初一个INSERT语句明白设置的(对dummy用户),因而那些列被付与缺省值N。这是GRANTUSAGE做的一样的事变。
以下例子增添一个用户custom,他能从主机localhost、server.domain和whitehouse.gov毗连。他只想要从localhost存取bankaccount数据库,从whitehouse.gov存取expenses数据库和从一切3台主机存取customer数据库。他想要从一切3台主机上利用口令stupid。
为了利用GRANT语句设置个用户的权限,运转这些命令:

shell>mysql--user=rootmysql
mysql>GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ONbankaccount.*
TOcustom@localhost
IDENTIFIEDBYstupid;
mysql>GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ONexpenses.*
TOcustom@whitehouse.gov
IDENTIFIEDBYstupid;
mysql>GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ONcustomer.*
TOcustom@%
IDENTIFIEDBYstupid;

经由过程间接修正受权表设置用户权限,运转这些命令(注重,在停止时FLUSHPRIVILEGES):

shell>mysql--user=rootmysql
mysql>INSERTINTOuser(Host,User,Password)
VALUES(localhost,custom,PASSWORD(stupid));
mysql>INSERTINTOuser(Host,User,Password)
VALUES(server.domain,custom,PASSWORD(stupid));
mysql>INSERTINTOuser(Host,User,Password)
VALUES(whitehouse.gov,custom,PASSWORD(stupid));
mysql>INSERTINTOdb
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
(localhost,bankaccount,custom,Y,Y,Y,Y,Y,Y);
mysql>INSERTINTOdb
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
(whitehouse.gov,expenses,custom,Y,Y,Y,Y,Y,Y);
mysql>INSERTINTOdb
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES(%,customer,custom,Y,Y,Y,Y,Y,Y);
mysql>FLUSHPRIVILEGES;

头3个INSERT语句增添user表条目,同意用户custom用给定口令从分歧的主机举行毗连,可是没有授与任何允许(一切权限被设置为缺省值N)。后3个INSERT语句增添db表条目,授与custom以bankaccount、expenses和customer数据库权限,可是只能在从准确的主机存取时。一般,在受权表间接被修正时,服务器必需原告知再次装进他们(用FLUSHPRIVILEGES)以便使权限修正失效。
假如你想要给特定的用户从一个给定的域上的任何呆板上存取权限,你能够收回一个以下的GRANT语句:

mysql>GRANT...
ON*.*
TOmyusername@"%.mydomainname.com"
IDENTIFIEDBYmypassword;

为了经由过程间接修正受权表做一样的事变,如许做:

mysql>INSERTINTOuserVALUES(%.mydomainname.com,myusername,
PASSWORD(mypassword),...);
mysql>FLUSHPRIVILEGES;

你也能够利用xmysqladmin、mysql_webadmin乃至xmysql在受权表中拔出、改动和更新值。你能够在MySQL的Contrib目次找到这些有用程序。
你可以配置MySQL运行在微小的嵌入式应用程序中,处理的数据可能不足1Mb??而你也可以用它来处理数Tb的数据。MySQL获得这种可扩展性的路径之一是通过一个人们所熟知的存储过程,这是一个运行在程序之外的微型、预编译程序。

飘飘悠悠 发表于 2015-1-18 19:03:07

总感觉自己还是不会SQL

第二个灵魂 发表于 2015-1-27 07:28:17

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

活着的死人 发表于 2015-2-5 06:06:45

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

简单生活 发表于 2015-2-11 07:13:47

还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。

乐观 发表于 2015-3-1 23:59:51

分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。

爱飞 发表于 2015-3-11 01:27:05

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

蒙在股里 发表于 2015-3-17 18:10:50

再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
页: [1]
查看完整版本: 发布在MySQL数据库增添新用户权限简介