您的位置:首页精文荟萃软件资讯 → mysql 运行权限

mysql 运行权限

时间:2004/10/7 19:05:00来源:本站整理作者:蓝点我要评论(0)

 对于一个刚安装好的 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@"%.mydomainname.com" 

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本