mysql 运行权限 阳飞.docx

上传人:b****2 文档编号:11708636 上传时间:2023-06-02 格式:DOCX 页数:42 大小:46.54KB
下载 相关 举报
mysql 运行权限 阳飞.docx_第1页
第1页 / 共42页
mysql 运行权限 阳飞.docx_第2页
第2页 / 共42页
mysql 运行权限 阳飞.docx_第3页
第3页 / 共42页
mysql 运行权限 阳飞.docx_第4页
第4页 / 共42页
mysql 运行权限 阳飞.docx_第5页
第5页 / 共42页
mysql 运行权限 阳飞.docx_第6页
第6页 / 共42页
mysql 运行权限 阳飞.docx_第7页
第7页 / 共42页
mysql 运行权限 阳飞.docx_第8页
第8页 / 共42页
mysql 运行权限 阳飞.docx_第9页
第9页 / 共42页
mysql 运行权限 阳飞.docx_第10页
第10页 / 共42页
mysql 运行权限 阳飞.docx_第11页
第11页 / 共42页
mysql 运行权限 阳飞.docx_第12页
第12页 / 共42页
mysql 运行权限 阳飞.docx_第13页
第13页 / 共42页
mysql 运行权限 阳飞.docx_第14页
第14页 / 共42页
mysql 运行权限 阳飞.docx_第15页
第15页 / 共42页
mysql 运行权限 阳飞.docx_第16页
第16页 / 共42页
mysql 运行权限 阳飞.docx_第17页
第17页 / 共42页
mysql 运行权限 阳飞.docx_第18页
第18页 / 共42页
mysql 运行权限 阳飞.docx_第19页
第19页 / 共42页
mysql 运行权限 阳飞.docx_第20页
第20页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

mysql 运行权限 阳飞.docx

《mysql 运行权限 阳飞.docx》由会员分享,可在线阅读,更多相关《mysql 运行权限 阳飞.docx(42页珍藏版)》请在冰点文库上搜索。

mysql 运行权限 阳飞.docx

mysql运行权限阳飞

mysql运行权限

作者:

Admin来源:

ASP中文网加入时间:

2004-3-9

对于一个刚安装好的 mysql,其安全性是很差的,因为任何使用 mysql 的用户都能使用和更改数据库的资料,因此需要为 mysql 的 root 用户设置口令(mysql 的 root 与 linux 的 root 是两回事,它们之间没有任何关系). 

为 root 设置口令需要用到 mysqladmin 这个命令,因为我安装的 mysql 在 /usr/local 下,因此,我到目录 /usr/local/bin 下运行这个命令:

 

#./mysqladmin -u root password "passwd" 

 

"passwd" 是我为 root 设置的口令明文; 

好了,我在 root 用户下运行 mysql:

 

#mysql 

被拒绝了,再用下面的命令运行 mysql:

 

#mysql -uroot -p 

出现:

Enter password:

 

我输入密码后,成功登入了,因此不必再担心有其他用户随意使用数据库了,接着又出现问题了,root 权限在 mysql 里有控制一切的权利,当有用户请求使用数据库时,把 root 的密码告诉用户也是很危险的,所以我考虑在数据库再设置其他的用户帐号,并将适当的权限开放给他. 

创建新用户和授权,需要用到下面这个语法:

 

grant privileges on what to user identified by "passwd" with grant option 

privileges 分配权限 

what 权限的应用级别 

user 用户 

passwd 密码明文 

with grant option 使用这个子句时将允许用户将其权限分配给他人. 

我准备创建 team 的用户,并只允许他使用 team 数据库的权限,所以我使用了以下的名令:

 

#mysql -uroot -ppasswd 

先运行 mysql 

>grant all on team.* to team@localhost identified by "team"; 

在这我给了 team 用户控制 team 数据库的所有权限,并且不允许他分配权限给其它人. 

这样当用户请求使用数据库时,我只需将 team 用户的密码交给他就行了. 

另外在 web 页控制 mysql 数据库的工具 phpMyAdmin 是个非常强大而又危险的工具,为了数据库的安全,最好在使用这个工具时,让用户通过认证以策安全,我会在介绍 apache 服务器配置时介绍如何设置认证. 

你可以有2个不同的方法增加用户:

通过使用GRANT语句或通过直接操作MySQL授权表。

比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。

 

下面的例子显示出如何使用mysql客户安装新用户。

这些例子假定权限根据以前的章节描述的缺省被安装。

这意味着为了改变,你必须在mysqld正在运行同一台机器上,你必须作为MySQL root用户连接,并且root用户必须对mysql数据库有insert权限和reload管理权限。

另外,如果你改变了root用户口令,你必须如下的mysql命令指定它。

 

你可以通过发出GRANT语句增加新用户:

 

shell> mysql --user=root mysql 

mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost 

     IDENTIFIED BY 'something' WITH GRANT OPTION; 

mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" 

     IDENTIFIED BY 'something' WITH GRANT OPTION; 

mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost; 

mysql> GRANT USAGE ON *.* TO dummy@localhost; 

这些GRANT语句安装3个新用户:

 

monty 

可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令('something'做这个。

注意,我们必须对monty@localhost和monty@"%"发出GRANT语句。

如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。

 

admin 

可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。

这允许用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,还有mysqladmin processlist。

没有授予数据库有关的权限。

他们能在以后通过发出另一个GRANT语句授权。

 

dummy 

可以不用一个口令连接的一个用户,但是只能从本地主机。

全局权限被设置为'N'--USAGE权限类型允许你无需权限就可设置一个用户。

它假定你将在以后授予数据库相关的权限。

 

你也可以直接通过发出INSERT语句增加同样的用户存取信息,然后告诉服务器再次装入授权表:

 

shell> mysql --user=root mysql 

mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('something'), 

       'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y') 

mysql> INSERT INTO user VALUES('%','monty',PASSWORD('something'), 

       'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y') 

mysql> INSERT INTO user SET Host='localhost',User='admin', 

        Reload_priv='Y', Process_priv='Y'; 

mysql> INSERT INTO user (Host,User,Password) 

           VALUES('localhost','dummy',''); 

mysql> FLUSH PRIVILEGES; 

取决于你的MySQL版本,对上述,你可能必须使用一个不同数目'Y'值(在3.22.11以前的版本有更少的权限列)。

对admin用户,只用在3.22.11开始的版本具有的更加可读的INSERT扩充的语法。

 

注意,为了设置一个超级用户,你只需创造一个user表条目,其权限字段设为'Y'。

不需要db或host表的条目。

 

在user表中的权限列不是由最后一个INSERT语句明确设置的(对dummy用户),因此那些列被赋予缺省值'N'。

这是GRANT USAGE做的同样的事情。

 

下列例子增加一个用户custom,他能从主机localhost、server.domain和whitehouse.gov连接。

他只想要从localhost存取bankaccount数据库,从whitehouse.gov存取expenses数据库和从所有3台主机存取customer数据库。

他想要从所有3台主机上使用口令stupid。

 

为了使用GRANT语句设置个用户的权限,运行这些命令:

 

shell> mysql --user=root mysql 

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 

     ON bankaccount.* 

     TO custom@localhost 

     IDENTIFIED BY 'stupid'; 

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 

     ON expenses.* 

     TO custom@whitehouse.gov 

     IDENTIFIED BY 'stupid'; 

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 

     ON customer.* 

     TO custom@'%' 

     IDENTIFIED BY 'stupid'; 

通过直接修改授权表设置用户权限,运行这些命令(注意,在结束时FLUSH PRIVILEGES):

 

shell> mysql --user=root mysql 

mysql> INSERT INTO user (Host,User,Password) 

   VALUES('localhost','custom',PASSWORD('stupid')); 

mysql> INSERT INTO user (Host,User,Password) 

   VALUES('server.domain','custom',PASSWORD('stupid')); 

mysql> INSERT INTO user (Host,User,Password) 

   VALUES('whitehouse.gov','custom',PASSWORD('stupid')); 

mysql> INSERT INTO db 

   (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> INSERT INTO db 

   (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> INSERT INTO db 

   (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> FLUSH PRIVILEGES; 

头3个INSERT语句增加user表条目,允许用户custom用给定口令从不同的主机进行连接,但是没有授予任何许可(所有权限被设置为缺省值'N')。

后3个INSERT语句增加db表条目,授予custom以bankaccount、expenses和customer数据库权限,但是只能在从正确的主机存取时。

通常,在授权表直接被修改时,服务器必须被告知再次装入他们(用FLUSH PRIVILEGES)以便使权限修改生效。

 

如果你想要给特定的用户从一个给定的域上的任何机器上存取权限,你可以发出一个如下的GRANT语句:

 

mysql> GRANT ... 

     ON *.* 

     TO myusername@"%" 

(出处:

下面就详细介绍如何设置文件系统和授权表mysql,实现MySQL的两级安全性。

0euMXvgTDB

7.1 MySQL的权限系统0euMXvgTDB

MySQL有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作MySQL数据库必须要走的第一步,对于一个熟悉SQL基本操作的人来说,也是MySQL所有的知识中比较难以理解的一个部分。

本节通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用这个优秀的数据库系统。

 0euMXvgTDB

MySQL的安全系统是很灵活的,它允许你以多种不同方式设置用户权限。

一般地,你可使用标准的SQL语句GRANT和REVOKE语句做,他们为你修改控制客户访问的授权表,然而,你可能由一个不支持这些语句的老版本的MySQL(在3.22.11之前这些语句不起作用),或者你发觉用户权限看起来不是以你想要的方式工作。

对于这种情况,了解MySQL授权表的结构和服务器如何利用它们决定访问权限是有帮助的,这样的了解允许你通过直接修改授权表增加、删除或修改用户权限,它也允许你在检查这些表时诊断权限问题。

0euMXvgTDB

7.1.1授权表的结构0euMXvgTDB

通过网络连接服务器的客户对MySQL数据库的访问由授权表内容来控制。

这些表位于mysql数据库中,并在第一次安装MySQL的过程中初始化(运行mysql_install_db脚本)。

授权表共有5个表:

user、db、host、tables_priv和columns_priv。

0euMXvgTDB

7.1.1.1授权表user、db和host的结构和作用0euMXvgTDB

表7-1  授权表user、db和host的结构0euMXvgTDB

User表 Db表 Host表0euMXvgTDB

作用域列0euMXvgTDB

Host Host Host0euMXvgTDB

 Db Db0euMXvgTDB

User User 0euMXvgTDB

Password  0euMXvgTDB

数据库/表的权限列0euMXvgTDB

Alter_priv Alter_priv Alter_priv0euMXvgTDB

Create_priv Create_priv Delete_priv0euMXvgTDB

Delete_priv Drop_priv Drop_priv0euMXvgTDB

Index_priv Index_priv Index_priv0euMXvgTDB

Insert_priv Insert_priv References_priv0euMXvgTDB

References_priv Select_priv Select_priv0euMXvgTDB

Update_priv Update_priv Update_priv0euMXvgTDB

Alter_priv Alter_priv Alter_priv

XJIies0QH2

File_priv  0euMXvgTDB

Grant_priv Grant_priv Grant_priv0euMXvgTDB

Process_priv  0euMXvgTDB

Reload_priv  0euMXvgTDB

Shutdown_priv  0euMXvgTDB

授权表的内容有如下用途:

0euMXvgTDB

 user表0euMXvgTDB

user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。

在user表启用的任何权限均是全局权限,并适用于所有数据库。

例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

 0euMXvgTDB

 db表0euMXvgTDB

db表列出数据库,而用户有权限访问它们。

在这里指定的权限适用于一个数据库中的所有表。

 0euMXvgTDB

 host表0euMXvgTDB

host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。

这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。

0euMXvgTDB

7.1.1.2授权表tables_priv和columns_priv的结构和作用0euMXvgTDB

表7-2  授权表tables_priv和columns_priv的结构0euMXvgTDB

授权表tables_priv 授权表columns_priv0euMXvgTDB

作用域列0euMXvgTDB

Host Host0euMXvgTDB

Db Db0euMXvgTDB

User User0euMXvgTDB

Table_name Table_name0euMXvgTDB

 Column_name0euMXvgTDB

权限列0euMXvgTDB

Table_priv Column_priv0euMXvgTDB

其他列0euMXvgTDB

Timestamp Timestamp0euMXvgTDB

Grantor 

XJIies0QH2

 MySQL没有rows_priv表,因为它不提供记录级权限,例如,你不能限制用户于表中包含特定列值的行。

如果你确实需要这种能力,你必须用应用编程来提供。

如果你想执行建议的记录级锁定,你可用GET_LOCK()函数做到。

0euMXvgTDB

授权表的内容有如下用途:

0euMXvgTDB

 tables_priv表0euMXvgTDB

tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。

 0euMXvgTDB

 columns_priv表0euMXvgTDB

columns_priv表指定列级权限。

这里指定的权限适用于一个表的特定列。

 0euMXvgTDB

 tables_priv和columns_priv表在MySQL 3.22.11版引进(与GRANT语句同时)。

如果你有较早版本的MySQL,你的mysql数据库将只有user、db和host表。

如果你从老版本升级到3.22.11或更新,而没有tables_priv和columns_priv表,运行mysql_fix_privileges_tables脚本创建它们。

0euMXvgTDB

7.1.2用户的权限0euMXvgTDB

权限信息用user、db、host、tables_priv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。

在MySQL启动时和在7.5权限修改何时生效所说的情况时,服务器读入这些数据库表内容。

0euMXvgTDB

7.1.2.1数据库和表的权限0euMXvgTDB

下列权限运用于数据库和表上的操作。

0euMXvgTDB

 SELECT0euMXvgTDB

允许你使用SELECT语句从表中检索数据。

SELECT语句只有在他们真正从一个表中检索行是才需要select权限,你可以执行某个SELECT语句,甚至没有任何到服务器上的数据库里的存取任何东西的许可。

例如,你可使用mysql客户作为一个简单的计算器:

 0euMXvgTDB

mysql> SELECT 1+1&#59;0euMXvgTDB

mysql> SELECT PI()*2&#59;0euMXvgTDB

 UPDATE 0euMXvgTDB

允许你修改表中的已有的记录。

 0euMXvgTDB

 INSERThttp:

//www.

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2