[高等教育]mysql 运行权限 阳飞.doc

上传人:音乐台 文档编号:1994102 上传时间:2019-01-29 格式:DOC 页数:71 大小:151.50KB
返回 下载 相关 举报
[高等教育]mysql 运行权限 阳飞.doc_第1页
第1页 / 共71页
[高等教育]mysql 运行权限 阳飞.doc_第2页
第2页 / 共71页
[高等教育]mysql 运行权限 阳飞.doc_第3页
第3页 / 共71页
亲,该文档总共71页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[高等教育]mysql 运行权限 阳飞.doc》由会员分享,可在线阅读,更多相关《[高等教育]mysql 运行权限 阳飞.doc(71页珍藏版)》请在三一文库上搜索。

1、mysql 运行权限作者:Admin 来源:ASP中文网 加入时间:2004-3-9对于一个刚安装好的mysql,其安全性是很差的,因为任何使用mysql的用户都能使用和更改数据库的资料,因此需要为mysql的root用户设置口令(mysql的root与linux的root是两回事,它们之间没有任何关系).为root设置口令需要用到mysqladmin这个命令,因为我安装的mysql在/usr/local下,因此,我到目录/usr/local/bin下运行这个命令:#./mysqladmin-urootpasswordpasswdpasswd是我为root设置的口令明文;好了,我在root用户

2、下运行mysql:#mysql被拒绝了,再用下面的命令运行mysql:#mysql-uroot-p出现:Enterpassword:我输入密码后,成功登入了,因此不必再担心有其他用户随意使用数据库了,接着又出现问题了,root权限在mysql里有控制一切的权利,当有用户请求使用数据库时,把root的密码告诉用户也是很危险的,所以我考虑在数据库再设置其他的用户帐号,并将适当的权限开放给他.创建新用户和授权,需要用到下面这个语法:grantprivilegesonwhattouseridentifiedbypasswdwithgrantoptionprivileges分配权限what权限的应用级别

3、user用户passwd密码明文withgrantoption使用这个子句时将允许用户将其权限分配给他人.我准备创建team的用户,并只允许他使用team数据库的权限,所以我使用了以下的名令:#mysql-uroot-ppasswd先运行mysqlgrantallonteam.*toteamlocalhostidentifiedbyteam;在这我给了team用户控制team数据库的所有权限,并且不允许他分配权限给其它人.这样当用户请求使用数据库时,我只需将team用户的密码交给他就行了.另外在web页控制mysql数据库的工具phpMyAdmin是个非常强大而又危险的工具,为了数据库的安全,

4、最好在使用这个工具时,让用户通过认证以策安全,我会在介绍apache服务器配置时介绍如何设置认证.你可以有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。下面的例子显示出如何使用mysql客户安装新用户。这些例子假定权限根据以前的章节描述的缺省被安装。这意味着为了改变,你必须在mysqld正在运行同一台机器上,你必须作为MySQLroot用户连接,并且root用户必须对mysql数据库有insert权限和reload管理权限。另外,如果你改变了root用户口令,你必须如下的mysql命令指定它。你

5、可以通过发出GRANT语句增加新用户:shellmysql-user=rootmysqlmysqlGRANTALLPRIVILEGESON*.*TOmontylocalhostIDENTIFIEDBYsomethingWITHGRANTOPTION;mysqlGRANTALLPRIVILEGESON*.*TOmonty%IDENTIFIEDBYsomethingWITHGRANTOPTION;mysqlGRANTRELOAD,PROCESSON*.*TOadminlocalhost;mysqlGRANTUSAGEON*.*TOdummylocalhost;这些GRANT语句安装3个新用户:mo

6、nty可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令(something做这个。注意,我们必须对montylocalhost和monty%发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。admin可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行mysqladminreload、mysqladminrefresh和mysqla

7、dminflush-*命令,还有mysqladminprocesslist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。dummy可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为N-USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。你也可以直接通过发出INSERT语句增加同样的用户存取信息,然后告诉服务器再次装入授权表:shellmysql-user=rootmysqlmysqlINSERTINTOuserVALUES(localhost,monty,PASSWORD(something),Y,Y,Y,Y,Y

8、,Y,Y,Y,Y,Y,Y,Y,Y,Y)mysqlINSERTINTOuserVALUES(%,monty,PASSWORD(something),Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y)mysqlINSERTINTOuserSETHost=localhost,User=admin,Reload_priv=Y,Process_priv=Y;mysqlINSERTINTOuser(Host,User,Password)VALUES(localhost,dummy,);mysqlFLUSHPRIVILEGES;取决于你的MySQL版本,对上述,你可能必须使用一个不同数目Y值(在3.2

9、2.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存

10、取expenses数据库和从所有3台主机存取customer数据库。他想要从所有3台主机上使用口令stupid。为了使用GRANT语句设置个用户的权限,运行这些命令:shellmysql-user=rootmysqlmysqlGRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONbankaccount.*TOcustomlocalhostIDENTIFIEDBYstupid;mysqlGRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONexpenses.*TOcustomwhitehouse.govIDENTIFIE

11、DBYstupid;mysqlGRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONcustomer.*TOcustom%IDENTIFIEDBYstupid;通过直接修改授权表设置用户权限,运行这些命令(注意,在结束时FLUSHPRIVILEGES):shellmysql-user=rootmysqlmysqlINSERTINTOuser(Host,User,Password)VALUES(localhost,custom,PASSWORD(stupid);mysqlINSERTINTOuser(Host,User,Password)VALUES(ser

12、ver.domain,custom,PASSWORD(stupid);mysqlINSERTINTOuser(Host,User,Password)VALUES(whitehouse.gov,custom,PASSWORD(stupid);mysqlINSERTINTOdb(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);mysqlINSERTINTOdb(Host,Db,User

13、,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES(whitehouse.gov,expenses,custom,Y,Y,Y,Y,Y,Y);mysqlINSERTINTOdb(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES(%,customer,custom,Y,Y,Y,Y,Y,Y);mysqlFLUSHPRIVILEGES;头3个INSERT语句增加user表

14、条目,允许用户custom用给定口令从不同的主机进行连接,但是没有授予任何许可(所有权限被设置为缺省值N)。后3个INSERT语句增加db表条目,授予custom以bankaccount、expenses和customer数据库权限,但是只能在从正确的主机存取时。通常,在授权表直接被修改时,服务器必须被告知再次装入他们(用FLUSHPRIVILEGES)以便使权限修改生效。如果你想要给特定的用户从一个给定的域上的任何机器上存取权限,你可以发出一个如下的GRANT语句:mysqlGRANT.ON*.*TOmyusername%(出处:) 下面就详细介绍如何设置文件系统和授权表mysql,实现My

15、SQL的两级安全性。 http:/ 0euMXvgTDB7.1MySQL的权限系统 http:/ 0euMXvgTDBMySQL有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作MySQL数据库必须要走的第一步,对于一个熟悉SQL基本操作的人来说,也是MySQL所有的知识中比较难以理解的一个部分。本节通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用这个优秀的数据库系统。 http:/ 0euMXvgTDBMySQL的安全系统是很灵活的,它允许你以多种不同方式设置用户权限。一般地,你可使用标准的SQL语句GRANT和REVOKE语句做,他们为你修改控制客户访问的授权表,

16、然而,你可能由一个不支持这些语句的老版本的MySQL(在3.22.11之前这些语句不起作用),或者你发觉用户权限看起来不是以你想要的方式工作。对于这种情况,了解MySQL授权表的结构和服务器如何利用它们决定访问权限是有帮助的,这样的了解允许你通过直接修改授权表增加、删除或修改用户权限,它也允许你在检查这些表时诊断权限问题。 http:/ 0euMXvgTDB7.1.1授权表的结构 http:/ 0euMXvgTDB通过网络连接服务器的客户对MySQL数据库的访问由授权表内容来控制。这些表位于mysql数据库中,并在第一次安装MySQL的过程中初始化(运行mysql_install_db脚本)。

17、授权表共有5个表:user、db、host、tables_priv和columns_priv。 http:/ 0euMXvgTDB7.1.1.1授权表user、db和host的结构和作用 http:/ 0euMXvgTDB表7-1授权表user、db和host的结构 http:/ 0euMXvgTDBUser表Db表Host表 http:/ 0euMXvgTDB作用域列 http:/ 0euMXvgTDBHostHostHost http:/ 0euMXvgTDBDbDb http:/ 0euMXvgTDBUserUser http:/ 0euMXvgTDBPassword http:/ 0e

18、uMXvgTDB数据库/表的权限列 http:/ 0euMXvgTDBAlter_privAlter_privAlter_priv http:/ 0euMXvgTDBCreate_privCreate_privDelete_priv http:/ 0euMXvgTDBDelete_privDrop_privDrop_priv http:/ 0euMXvgTDBIndex_privIndex_privIndex_priv http:/ 0euMXvgTDBInsert_privInsert_privReferences_priv http:/ 0euMXvgTDBReferences_privS

19、elect_privSelect_priv http:/ 0euMXvgTDBUpdate_privUpdate_privUpdate_priv http:/ 0euMXvgTDBAlter_privAlter_privAlter_priv http:/ XJIies0QH2File_priv http:/ 0euMXvgTDBGrant_privGrant_privGrant_priv http:/ 0euMXvgTDBProcess_priv http:/ 0euMXvgTDBReload_priv http:/ 0euMXvgTDBShutdown_priv http:/ 0euMXvg

20、TDB授权表的内容有如下用途: http:/ 0euMXvgTDBuser表 http:/ 0euMXvgTDBuser表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。 http:/ 0euMXvgTDBdb表 http:/ 0euMXvgTDBdb表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。 http:/ 0euMXvgTDB

21、1548;host表 http:/ 0euMXvgTDBhost表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。 http:/ 0euMXvgTDB7.1.1.2授权表tables_priv和columns_priv的结构和作用 http:/ 0euMXvgTDB表7-2授权表tables_priv和columns_priv的结构 http:/ 0euMXvgTDB授权表tables_priv授权表columns_priv http:/ 0euMXvgTDB作用域列 htt

22、p:/ 0euMXvgTDBHostHost http:/ 0euMXvgTDBDbDb http:/ 0euMXvgTDBUserUser http:/ 0euMXvgTDBTable_nameTable_name http:/ 0euMXvgTDBColumn_name http:/ 0euMXvgTDB权限列 http:/ 0euMXvgTDBTable_privColumn_priv http:/ 0euMXvgTDB其他列 http:/ 0euMXvgTDBTimestampTimestamp http:/ 0euMXvgTDBGrantor http:/ XJIies0QH2MyS

23、QL没有rows_priv表,因为它不提供记录级权限,例如,你不能限制用户于表中包含特定列值的行。如果你确实需要这种能力,你必须用应用编程来提供。如果你想执行建议的记录级锁定,你可用GET_LOCK()函数做到。 http:/ 0euMXvgTDB授权表的内容有如下用途: http:/ 0euMXvgTDBtables_priv表 http:/ 0euMXvgTDBtables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。 http:/ 0euMXvgTDBcolumns_priv表 http:/ 0euMXvgTDBcolumns_pri

24、v表指定列级权限。这里指定的权限适用于一个表的特定列。 http:/ 0euMXvgTDBtables_priv和columns_priv表在MySQL3.22.11版引进(与GRANT语句同时)。如果你有较早版本的MySQL,你的mysql数据库将只有user、db和host表。如果你从老版本升级到3.22.11或更新,而没有tables_priv和columns_priv表,运行mysql_fix_privileges_tables脚本创建它们。 http:/ 0euMXvgTDB7.1.2用户的权限 http:/ 0euMXvgTDB权限信息用user、db、host、tables_pr

25、iv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。在MySQL启动时和在7.5权限修改何时生效所说的情况时,服务器读入这些数据库表内容。 http:/ 0euMXvgTDB7.1.2.1数据库和表的权限 http:/ 0euMXvgTDB下列权限运用于数据库和表上的操作。 http:/ 0euMXvgTDBSELECT http:/ 0euMXvgTDB允许你使用SELECT语句从表中检索数据。SELECT语句只有在他们真正从一个表中检索行是才需要select权限,你可以执行某个SELECT语句,甚至没有任何到服务器上的数据库里的存取任

26、何东西的许可。例如,你可使用mysql客户作为一个简单的计算器: http:/ 0euMXvgTDBmysqlSELECT1+1; http:/ 0euMXvgTDBmysqlSELECTPI()*2; http:/ 0euMXvgTDBUPDATE http:/ 0euMXvgTDB允许你修改表中的已有的记录。 http:/ 0euMXvgTDBINSERT http:/ 0euMXvgTDB允许在表中插入记录 http:/ 0euMXvgTDBDELETE http:/ 0euMXvgTDB允许你从表中删除现有记录。 http

27、:/ 0euMXvgTDBALTER http:/ 0euMXvgTDB允许你使用ALTERTABLE语句,这其实是一个简单的第一级权限,你必须由其他权限,这看你想对数据库实施什么操作。 http:/ 0euMXvgTDBCREATE http:/ 0euMXvgTDB允许你创建数据库和表,但不允许创建索引。 http:/ 0euMXvgTDBDROP http:/ 0euMXvgTDB允许你删除(抛弃)数据库和表,但不允许删除索引。 http:/ 0euMXvgTDB注意:如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了M

28、ySQL存取权限的数据库! http:/ 0euMXvgTDBINDEX http:/ 0euMXvgTDB允许你创建并删除索引。 http:/ 0euMXvgTDBREFERENCES http:/ 0euMXvgTDB目前不用。 http:/ XJIies0QH27.1.2.2管理权限 http:/ 0euMXvgTDB下列权限运用于控制服务器或用户授权能力的操作的管理性操作。 http:/ 0euMXvgTDBFILE http:/ 0euMXvgTDB允许你告诉服务器读或写服务器主机上的文件。该权限不应该随便授予,它很危险,见“回避授权表

29、风险”。服务器确实较谨慎地保持在一定范围内使用该权限。你只能读任何人都能读的文件。你正在写的文件必须不是现存的文件,这防止你迫使服务器重写重要文件,如/etc/passwd或属于别人的数据库的数据目录。 http:/ 0euMXvgTDB如果你授权FILE权限,确保你不以UNIX的root用户运行服务器,因为root可在文件系统的任何地方创建新文件。如果你以一个非特权用户运行服务器,服务器只能在给用户能访问的目录中创建文件。 http:/ 0euMXvgTDBGRANT http:/ 0euMXvgTDB允许你将你自己的权限授予别人,包括GRANT。 http:/ 0euMXv

30、gTDBPROCESS http:/ 0euMXvgTDB允许你通过使用SHOWPROCESS语句或mysqladminprocess命令查看服务器内正在运行的线程(进程)的信息。这个权限也允许你用KILL语句或mysqladminkill命令杀死线程。 http:/ 0euMXvgTDB你总是能看到或杀死你自己的线程。PROCESS权限赋予你对任何线程做这些事情的能力。 http:/ 0euMXvgTDBRELOAD http:/ 0euMXvgTDB允许你执行大量的服务器管理操作。你可以发出FLUSH语句,你也能指性mysqladmin的reload、ref

31、resh、flush-hosts、flush-logs、flush-privileges和flush-tables等命令。 http:/ 0euMXvgTDBSHUTDOWN http:/ 0euMXvgTDB允许你用mysqladminshutdown关闭服务器。 http:/ 0euMXvgTDB在user、db和host表中,每一个权限以一个单独的列指定。这些列全部声明为一个ENUM(N,Y)类型,所以每个权的缺省值是“N”。在tables_priv和columns_priv中的权限以一个SET表示,它允许权限用一个单个列以任何组合指定。这两个表比其他三个表更新,这就是为

32、什么它们使用更有效的表示方式的原因。(有可能在未来,user、db和host表也用一个SET类型表示。) http:/ 0euMXvgTDB7.1.3授权表列的内容 http:/ 0euMXvgTDB7.1.3.1作用域列内容 http:/ 0euMXvgTDB一些范围列要求文字值,但它们大多数允许通配符或其他特殊值。 http:/ 0euMXvgTDB表7-3作用域列的类型 http:/ 0euMXvgTDB字段名类型 http:/ 0euMXvgTDBHostCHAR(60) http:/ 0euMXvgTDBUserCHAR(16) http:/ 0euMXvgTDBPasswordCH

33、AR(16) http:/ 0euMXvgTDBDbCHAR(64)(tables_priv和columns_priv表为CHAR(60) http:/ XJIies0QH2Host http:/ 0euMXvgTDB一个Host列值可以是一个主机名或一个IP地址。值localhost意味着本地主机,但它只在你用一个localhost主机名时才匹配,而不是你在使用主机名时。假如你的本地主机名是并且在user表中有对你的两条记录,一个有一个Host值或localhost,而另一个有,有localhost的记录将只当你连接localhost时匹配,其他在只在连接时才匹配。如果你想让

34、客户能以两种方式连接,你需要在user表中有两条记录。 http:/ 0euMXvgTDB你也可以用通配符指定Host值。可以使用SQL的模式字符“%”和“_”并具有当你在一个查询中使用LIKE算符同样的含义(不允许regex算符)。SQL模式字符都能用于主机名和IP地址。如%wisc.edu匹配任何wisc.edu域内的主机,而%.edu匹配任何教育学院的主机。类似地,192.168.%匹配任何在192.168B类子网的主机,而192.168.3.%匹配任何在192.168.3C类子网的主机。 http:/ 0euMXvgTDB%值匹配所有主机,并可用于允许一个用户从任何地方连接。一个空白的

35、Host值等同于%。(例外:在db表中,一个空白Host值含义是“进一步检查host表”,该过程在“查询访问验证”中介绍。) http:/ 0euMXvgTDB从MySQL3.23起,你也可以指定带一个表明那些为用于网络地址的网络掩码的IP地址,如192.168.128.0/17指定一个17位网络地址并匹配其IP地址是192.168.128前17位的任何主机。 http:/ 0euMXvgTDBUser http:/ 0euMXvgTDB用户名必须是文字的或空白。一个空白值匹配任何用户。%作为一个User值不意味着空白,相反它匹配一个字面上的%名字,这可能不是你想要的。 htt

36、p:/ 0euMXvgTDB当一个到来的连接通过user表被验证而匹配的记录包含一个空白的User值,客户被认为是一个匿名用户。 http:/ 0euMXvgTDBPassword http:/ 0euMXvgTDB口令值可以是空或非空,不允许用通配符。一个空口令不意味着匹配任何口令,它意味着用户必须不指定口令。 http:/ 0euMXvgTDB口令以一个加密过的值存储,不是一个字面上的文本。如果你在Password列中存储一个照字面上的口令,用户将不能连接!GRANT语句和mysqladminpassword命令为你自动加密口令,但是如果你用诸如INSERT、REPLACE

37、、UPDATE或SETPASSWORD等命令,一定要用PASSWORD(new_password)而不是简单的new_password来指定口令。 http:/ 0euMXvgTDBDb http:/ 0euMXvgTDB在columns_priv和tables_priv表中,Db值必须是真正的数据库名(照字面上),不允许模式和空白。在db和host中,Db值可以以字面意义指定或使用SQL模式字符%或_指定一个通配符。一个%或空白匹配任何数据库。 http:/ 0euMXvgTDBTable_name,Column_name http:/ 0euMXvgTDB这

38、些列中的值必须是照字面意思的表或列名,不允许模式和空白。 http:/ 0euMXvgTDB某些范围列被服务器视为大小写敏感的,其余不是。这些原则总结在下表中。特别注意Table_name值总是被看作大小写敏感的,即使在查询中的表名的大小写敏感性对待视服务器运行的主机的文件系统而定(UNIX下是大小写敏感,而Windows不是)。 http:/ XJIies0QH2某些作用域列被服务器视为大小写敏感的,其余不是。这些原则总结在下表中。特别注意Table_name值总是被看作大小写敏感的,即使在查询中的表名的大小写敏感性对待视服务器运行的主机的文件系统而定(UNIX下是大小写敏感,而Windows不是)。 http:/ 0euMXvgTDB表7-4作用域列的大小写敏感性 http:/ 0euMXvgTDB列大小写敏感性 http:/ 0euMXvgTDBHostNo http:/www.acnow

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1