MySQL中文参考手册7(MySQL存取权限系统)grant设置密码password
来源:互联网 作者: 出处:综艺读书 2007-07-18 6.11 向MySQL增加新用户权限
你可以有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"
IDENTIFIED BY 'mypassword';
为了通过直接修改授权表做同样的事情,这样做:
mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
PASSWORD('mypassword'),...);
mysql> FLUSH PRIVILEGES;
你也可以使用xmysqladmin、mysql_webadmin甚至xmysql在授权表中插入、改变和更新值。你可以在MySQL的Contrib目录找到这些实用程序。
6.12 怎样设置口令
在前面小节的例子里说明了一个重要的原则:当你使用INSERT或UPDATE语句存储一个非空的口令时,你必须使用PASSWORD()函数加密它。这是因为在user表中以加密形式存储口令,而不是作为纯文本。如果你忘记这个事实,你可能像这样试图设置口令:
shell> mysql -u root mysql
mysql> INSERT INTO user (Host,User,Password) VALUES('%','jeffrey','biscuit');
mysql> FLUSH PRIVILEGES
结果是纯文本值'biscuit'作为口令被存储在user表中。在用户jeffrey试图用这个口令连接服务器时,mysql客户用PASSWORD()加密它并且将结果送给服务器,服务器比较在user表中的值(它是纯文本值'biscuit')和加密的口令(而不是 'biscuit'),比较失败并且服务器拒绝连接:
shell> mysql -u jeffrey -pbiscuit test
Access denied
因为当他们被插入user表时,口令必须被加密,相反,INSERT语句应该象这样被指定:
mysql> INSERT INTO user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
当你使用SET PASSWORD语句时,你也必须使用PASSWORD()函数:
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
如果你使用GRANT ... IDENTIFIED BY语句或mysqladmin password命令设置口令,PASSWORD()函数是不必要的。他们都考虑到为你加密口令,多以你可像这样指定一个口令'biscuit':
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
或
shell> mysqladmin -u jeffrey password biscuit
注意: PASSWORD()不是以在Unix口令加密的同样方法施行口令加密。你不应该假定如果你的Unix口令和你的MySQL口令是一样的,PASSWORD()将导致与在Unix口令文件被存储的同样的加密值。见6.2 MySQL 用户名和口令。
更多内容请看 Cisco密码恢复专题 MySQL专题,或进入讨论组讨论。
你可以有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。
|
|
|||
你可以通过发出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"
IDENTIFIED BY 'mypassword';
为了通过直接修改授权表做同样的事情,这样做:
mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
PASSWORD('mypassword'),...);
mysql> FLUSH PRIVILEGES;
你也可以使用xmysqladmin、mysql_webadmin甚至xmysql在授权表中插入、改变和更新值。你可以在MySQL的Contrib目录找到这些实用程序。
6.12 怎样设置口令
在前面小节的例子里说明了一个重要的原则:当你使用INSERT或UPDATE语句存储一个非空的口令时,你必须使用PASSWORD()函数加密它。这是因为在user表中以加密形式存储口令,而不是作为纯文本。如果你忘记这个事实,你可能像这样试图设置口令:
shell> mysql -u root mysql
mysql> INSERT INTO user (Host,User,Password) VALUES('%','jeffrey','biscuit');
mysql> FLUSH PRIVILEGES
结果是纯文本值'biscuit'作为口令被存储在user表中。在用户jeffrey试图用这个口令连接服务器时,mysql客户用PASSWORD()加密它并且将结果送给服务器,服务器比较在user表中的值(它是纯文本值'biscuit')和加密的口令(而不是 'biscuit'),比较失败并且服务器拒绝连接:
shell> mysql -u jeffrey -pbiscuit test
Access denied
因为当他们被插入user表时,口令必须被加密,相反,INSERT语句应该象这样被指定:
mysql> INSERT INTO user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
当你使用SET PASSWORD语句时,你也必须使用PASSWORD()函数:
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
如果你使用GRANT ... IDENTIFIED BY语句或mysqladmin password命令设置口令,PASSWORD()函数是不必要的。他们都考虑到为你加密口令,多以你可像这样指定一个口令'biscuit':
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
或
shell> mysqladmin -u jeffrey password biscuit
注意: PASSWORD()不是以在Unix口令加密的同样方法施行口令加密。你不应该假定如果你的Unix口令和你的MySQL口令是一样的,PASSWORD()将导致与在Unix口令文件被存储的同样的加密值。见6.2 MySQL 用户名和口令。
相关图文阅读
频道图文推荐
相关专题
·电脑密码设置手册 (998篇文章)
·系统优化大全 (13868篇文章)
·系统安全设置 (18473篇文章)
·MySQL数据备份 (1667篇文章)
·系统安装手册 (16348篇文章)
·系统备份专题 (13473篇文章)
·Cisco密码恢复专题 (2681篇文章)
·Windows权限设置 (7758篇文章)
·MySQL (1573篇文章)
·MySQL安全 (8220篇文章)
·系统优化大全 (13868篇文章)
·系统安全设置 (18473篇文章)
·MySQL数据备份 (1667篇文章)
·系统安装手册 (16348篇文章)
·系统备份专题 (13473篇文章)
·Cisco密码恢复专题 (2681篇文章)
·Windows权限设置 (7758篇文章)
·MySQL (1573篇文章)
·MySQL安全 (8220篇文章)
·MySQL中文参考手册7(MySQL存取权限系统)gra (1967次浏览)
·防止sql注入的简单方法 (1903次浏览)
·IIS、ASP.NET和SQLServer的安全性问题 (112次浏览)
·SQL Server 2005对海量数据处理 (47次浏览)
·50种方法巧妙优化SQL Server数据库 (37次浏览)
·SQL Server连接VFP数据库的实现 (35次浏览)
·SQL循序渐进(15)IN 和 BETWEEN 条件运算符 (27次浏览)
·解决SQL Server虚拟内存不足情况 (17次浏览)
·打造SQL Server2000的安全策略 (16次浏览)
·两种SQL Server灾难恢复方法 (9次浏览)
·防止sql注入的简单方法 (1903次浏览)
·IIS、ASP.NET和SQLServer的安全性问题 (112次浏览)
·SQL Server 2005对海量数据处理 (47次浏览)
·50种方法巧妙优化SQL Server数据库 (37次浏览)
·SQL Server连接VFP数据库的实现 (35次浏览)
·SQL循序渐进(15)IN 和 BETWEEN 条件运算符 (27次浏览)
·解决SQL Server虚拟内存不足情况 (17次浏览)
·打造SQL Server2000的安全策略 (16次浏览)
·两种SQL Server灾难恢复方法 (9次浏览)
·MySQL中文参考手册7(MySQL存取权限系统)gra (1967次浏览)
·防止sql注入的简单方法 (1903次浏览)
·SQL Server开发者Oracle快速入门 (181次浏览)
·精细分析SQL server服务器的内存配置 (155次浏览)
·IIS、ASP.NET和SQLServer的安全性问题 (112次浏览)
·利用标准SQL语句实现查询记录分页 (55次浏览)
·比较SQL Server约束和DML触发器 (49次浏览)
·SQL Server 2005对海量数据处理 (47次浏览)
·初探 SQL Server 2008 “Katmai ” (42次浏览)
·如何对SQL Server数据表和数据库进行迭代操作 (41次浏览)
·防止sql注入的简单方法 (1903次浏览)
·SQL Server开发者Oracle快速入门 (181次浏览)
·精细分析SQL server服务器的内存配置 (155次浏览)
·IIS、ASP.NET和SQLServer的安全性问题 (112次浏览)
·利用标准SQL语句实现查询记录分页 (55次浏览)
·比较SQL Server约束和DML触发器 (49次浏览)
·SQL Server 2005对海量数据处理 (47次浏览)
·初探 SQL Server 2008 “Katmai ” (42次浏览)
·如何对SQL Server数据表和数据库进行迭代操作 (41次浏览)
·MySQL中文参考手册7(MySQL存取权限系统)gra (1967次浏览)
·防止sql注入的简单方法 (1903次浏览)
·MS-SQL开发常用汇总和t-sql技巧集锦 (404次浏览)
·SQL Server开发者Oracle快速入门 (181次浏览)
·轻松维护SQL Server 2005数据库 (160次浏览)
·精细分析SQL server服务器的内存配置 (155次浏览)
·教你如何在SQL Server计算列和平均值 (137次浏览)
·SQL Server 查询分析器快捷键集合 (123次浏览)
·解析SQL Server数据在不同数据库中的应用 (118次浏览)
·IIS、ASP.NET和SQLServer的安全性问题 (112次浏览)
·防止sql注入的简单方法 (1903次浏览)
·MS-SQL开发常用汇总和t-sql技巧集锦 (404次浏览)
·SQL Server开发者Oracle快速入门 (181次浏览)
·轻松维护SQL Server 2005数据库 (160次浏览)
·精细分析SQL server服务器的内存配置 (155次浏览)
·教你如何在SQL Server计算列和平均值 (137次浏览)
·SQL Server 查询分析器快捷键集合 (123次浏览)
·解析SQL Server数据在不同数据库中的应用 (118次浏览)
·IIS、ASP.NET和SQLServer的安全性问题 (112次浏览)
最新技术文档
·防止sql注入的简单方法 07-18
·MySQL中文参考手册7(MySQL存取权限系统)grant设置 07-18
·IIS、ASP.NET和SQLServer的安全性问题 07-16
·SQL Server连接VFP数据库的实现 07-16
·SQL循序渐进(15)IN 和 BETWEEN 条件运算符 07-15
·解决SQL Server虚拟内存不足情况 07-13
·50种方法巧妙优化SQL Server数据库 07-11
·SQL Server 2005对海量数据处理 07-10
·打造SQL Server2000的安全策略 07-10
·SQL Server怪辟:异常与孤立事务 07-10
·MySQL中文参考手册7(MySQL存取权限系统)grant设置 07-18
·IIS、ASP.NET和SQLServer的安全性问题 07-16
·SQL Server连接VFP数据库的实现 07-16
·SQL循序渐进(15)IN 和 BETWEEN 条件运算符 07-15
·解决SQL Server虚拟内存不足情况 07-13
·50种方法巧妙优化SQL Server数据库 07-11
·SQL Server 2005对海量数据处理 07-10
·打造SQL Server2000的安全策略 07-10
·SQL Server怪辟:异常与孤立事务 07-10
站内各频道最新更新文档
站内最新制作专题
|
|||
| ·ACDSEE专题教程-下载使用 ·迅雷专题教程-下载使用 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
热门关键字导读
站内频道文章精选
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |
百度推荐,商机无限
搜索您感兴趣的内容




