小女巫 发表于 2015-1-16 22:14:53

MYSQL编程:MySQL使用技能之存取权限

这种服务也提供了足够的监控功能来跟踪性能和使用情况,在问题发生时将发出通知并生成一定深度的分析报告。  MySQL利用于认证目标的用户名,与Unix用户名(登录名字)或Windows用户名有关。缺省地,年夜多半MySQL客户实验利用以后Unix用户名作为MySQL用户名登录,可是这仅仅为了便利,客户程序同意用-u或--user选项指定一个分歧的名字。及与平安的思索,一切的MySQL用户名都应当有口令。
 1.MySQL用户名和口令
  *MySQL利用于认证目标的用户名,与Unix用户名(登录名字)或Windows用户名有关。缺省地,年夜多半MySQL客户实验利用以后Unix用户名作为MySQL用户名登录,可是这仅仅为了便利,客户程序同意用-u或--user选项指定一个分歧的名字。及与平安的思索,一切的MySQL用户名都应当有口令。
  *MySQL用户名最长能够是16各字符;典范地,Unix用户名限定为8个字符。
  *MySQL口令与Unix口令不妨。
  *MySQL加密口令利用了一个Unix登录时代所用的分歧算法,PASSWORD()和ENCRYPT()
  函数PASSWORD(str)
  从纯文本口令str盘算一个口令字符串。该函数被用于为了在user受权表的Password列中存储口令而加密MySQL口令。
  mysql>selectPASSWORD(badpwd);
  ->7f84554057dd964b
  PASSWORD()加密长短可逆的。PASSWORD()不以与Unix口令加密的不异的办法实行口令加密。你不该该假定假如你的Unix口令和你的MySQL口令是一样的,PASSWORD()将招致与在Unix口令文件存储的不异的加密值。见ENCRYPT()。
  ENCRYPT(str[,salt])
  利用Unixcrypt()体系挪用加密str。salt参数应当是一个有2个字符的字符串。(MySQL3.22.16中,salt能够善于2个字符。)
  mysql>selectENCRYPT("hello");
  ->VxuFAJXVARROc
  假如crypt()在你的体系上不成用,ENCRYPT()老是前往NULL。ENCRYPT()只保存str肇端8个字符而疏忽一切其他,最少在某些体系上是如许。这将由底层的crypt()体系挪用的举动决意。
  1.与MySQL服务器毗连
  语法格局:
  shell>mysql[-hhost_name][-uuser_name][-pyour_pass]
  -h,-u和-p选项的另外一种情势是--host=host_name、--user=user_name和--password=your_pass。
  注重:在-p或--password=与跟从它前面的口令之间没有空格。(在命令行上指定一个口令是不平安的!)
  关于命令行没有的连接参数,mysql利用缺省值:
  *缺省主机名是localhost。
  *缺省用户名是你的Unix登录名。
  *假如没有-p,则没有供应口令。
  缺省值参数的指定:
  在你的主目次下“.my.cnf”的设置文件的大节里指定毗连参数:
  
  host=host_name
  user=user_name
  password=your_pass
  注:命令行上被指定的值优先于在设置文件和情况变量中指定的值
  最平安的办法是让客户程序提醒口令或在一个得当回护的“.my.cnf”文件中指定口令。
  1.MySQL供应的权限
  权限   列   高低文
  selectSelect_priv表
  insertInsert_priv表
  updateUpdate_priv表
  deleteDelete_priv表
  indexIndex_priv表
  alterAlter_priv表
  createCreate_priv数据库、表或索引
  dropDrop_priv数据库或表
  grantGrant_priv数据库或表
  referencesReferences_priv数据库或表
  reloadReload_priv服务器办理
  shutdownShutdown_priv服务器办理
  processProcess_priv服务器办理
  fileFile_priv在服务器上的文件存取
  注:grant权限同意你把你本人具有的那些权限授给其他的用户。
  file权限赐与你用LOADDATAINFILE和SELECT...INTOOUTFILE语句读和写服务器上的文件,任何被授与这个权限的用户都能读或写MySQL服务器能读或写的任何文件。
  2.存取把持:毗连证明
  身份反省利用user表3个(Host,User和Password)局限字段。服务器只要在一个user表条目婚配你的主机名和用户名而且你供应了准确的口令时才承受毗连。
  注:一个Host值能够是主机名或一个IP数字,或localhost指出当地主机。能够在Host字段里利用通配符字符“%”和“_”。Host值%婚配任何主机名。当一个毗连被实验时,服务器扫瞄排序的条目并利用找到的第一个婚配。
  广泛的曲解是以为,对一个给定的用户名,当服务器试图对毗连寻觅婚配时,明白定名谁人用户的一切条目将起首被利用。这分明不是现实。
  3.存取把持:哀求证明
  一旦你创建了一个毗连,服务器进进阶段2。对在此毗连长进来的每一个哀求,服务器反省你是不是有充足的权限来实行它,受权表用GRANT和REVOKE命令操纵。
  GRANTpriv_type[(column_list)][,priv_type[(column_list)]...]
  ON{tbl_name**.*db_name.*}
  TOuser_name
  [,user_name...]
  
  REVOKEpriv_type[(column_list)][,priv_type[(column_list)]...]
  ON{tbl_name**.*db_name.*}
  FROMuser_name[,user_name...]
  GRANT在MySQL3.22.11或今后版本中完成。关于更早MySQL版本,GRANT语句不做任何事变。
  GRANT和REVOKE命令同意体系主管在4个权限级别上受权和撤回付与MySQL用户的权力:
  全局级别
  全局权限感化于一个给定服务器上的一切数据库。这些权限存储在mysql.user表中。
  数据库级别
  数据库权限感化于一个给定命据库的一切表。这些权限存储在mysql.db和mysql.host表中。
  表级别
  表权限感化于一个给定表的一切列。这些权限存储在mysql.tables_priv表中。
  列级别
  列权限感化于在一个给定表的单个列。这些权限存储在mysql.columns_priv表中。
  user表权限是超等用户权限。只把user表的权限授与超等用户如服务器或数据库主管是明智的。对其他用户,你应当把在user表中的权限设成N而且仅在一个特定命据库的基本上受权,利用db和host表。
  4.权限变动什么时候失效
  当mysqld启动时,一切的受权表内容被读进存储器而且从那点失效。
  用GRANT、REVOKE或SETPASSWORD对受权表实施的修正会当即被服务器注重到。
  假如你手工地修正受权表(利用INSERT、UPDATE等等),你应当实行一个FLUSHPRIVILEGES语句或运转mysqladminflush-privileges告知服务器再装载受权表,不然你的改动将不失效,除非你重启服务器。
  5.创建初始的MySQL权限
  在安装MySQL后,你经由过程运转scripts/mysql_install_db安装初始的存取权限。包括以下权限汇合:
  *MySQLroot用户作为可做任何事变的一个超等用户。毗连必需由当地主机收回。注重:出生的root口令是空的,因而任何人能以root而没有一个口令举行毗连而且被授与一切权限。
  *一个匿名用户,他可对有一个test或以test_入手下手的名字的数据库做任什么时候期事变,毗连必需由当地主机收回。这意味着任何当地用户能毗连而且视为匿名用户。
  *其他权限被回绝。比方,一样平常用户不克不及利用mysqladminshutdown或mysqladminprocesslist。
  为MySQLroot用户指定一个口令(注重,你利用PASSWORD()函数指定口令):
  shell>mysql-urootmysql
  mysql>UPDATEuserSETPassword=PASSWORD(new_password)
  WHEREuser=root;
  mysql>FLUSHPRIVILEGES;
  在MySQL3.22和以上版本中,你可使用SETPASSWORD语句:
  shell>mysql-urootmysql
  mysql>SETPASSWORDFORroot=PASSWORD(new_password);
  设置口令的另外一种办法是利用mysqladmin命令:
  shell>mysqladmin-urootpasswordnew_password
  看看scripts/mysql_install_db剧本,看它怎样安装缺省的权限。你可用它作为一个研讨怎样增添其他用户的基本
  为了完整重修权限表,删除在包括mysql数据库的目次下一切“*.frm”,“*.MYI”和“*.MYD”文件。(这是在数据库目次上面定名为“mysql”的目次,当你运转mysqld--help时,它被列出。)然后运转mysql_install_db剧本,大概在起首编纂它具有你想要的权限以后。
  1.向MySQL增添新用户权限
  增添用户2个分歧的办法:
  经由过程利用GRANT语句或经由过程间接操纵MySQL受权表。
  对照好的办法是利用GRANT语句,由于他们是更简明而且仿佛毛病少些。
  shell>mysql--user=rootmysql
  mysql>GRANTALLPRIVILEGESON*.*TOmonty@localhost
  IDENTIFIEDBYsomethingWITHGRANTOPTION;
  mysql>GRANTALLPRIVILEGESON*.*TOmonty@"%"
  IDENTIFIEDBYsomethingWITHGRANTOPTION;
  mysql>GRANTRELOAD,PROCESSON*.*TOadmin@localhost;
  mysql>GRANTUSAGEON*.*TOdummy@localhost;
  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
<Pstyle="TEXT-INDENT:2em">
根据Evans的调查报告,“MySQL的使用在未来将继续呈成长趋势。”

仓酷云 发表于 2015-1-19 05:59:20

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

爱飞 发表于 2015-1-25 15:56:05

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。

再现理想 发表于 2015-2-3 06:06:54

如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。

透明 发表于 2015-2-8 20:15:16

大侠们有推荐的书籍和学习方法写下吧。

蒙在股里 发表于 2015-2-26 03:47:27

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

第二个灵魂 发表于 2015-3-8 11:51:34

XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)

精灵巫婆 发表于 2015-3-15 22:27:50

这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。

若天明 发表于 2015-3-22 17:15:25

另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
页: [1]
查看完整版本: MYSQL编程:MySQL使用技能之存取权限