`

Mysql中建账号和赋权限的方法

阅读更多
Mysql中建账号和赋权限的方法(更详细的方法,建议使用此方法)
2008-05-23 17:54

1.CREATE USER

CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
            [, user [IDENTIFIED BY [PASSWORD] 'password']] ...

CREATE USER用于创建新的MySQL账户。要使用CREATE USER,您必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。对于每个账户,CREATE USER会在没有权限的mysql.user表中创建一个新记录。如果 账户已经存在,则出现错误。

使用自选的IDENTIFIED BY子句,可以为账户给定一个密码。user值和 密码的给定方法和GRANT语句一样。特别是,要在纯文本中指定密码,需忽略PASSWORD关键词。要把 密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD

2.使用GRANT语句

最好的方法是使用GRANT语句,因为这样更精确,错误少。从MySQL 3.22.11起提供了GRANT;它的主要用途是来给帐户授权的,但也可用来建立新帐户并同时授权。注意:当mysql运行于no_auto_create_user时要提供新建用户的密码,否则不能创新用户。
下面的示例说明如何使用MySQL客户端程序来设置新用户。
首先,使用MySQL程序以MySQL root用户来连接服务器:

shell> MySQL --user=root MySQL

如果你为root账户指定了密码,还需要为该MySQL命令和本节中的其它命令提供--password-p选项。

root连接到服务器上后,可以添加新账户。下面的语句使用GRANT来设置四个新账户:

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

    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

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

    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

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

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

GRANT语句创建的账户有下面的属性:

·         其中两个账户有相同的用户名monty和密码some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。一个账户 ('monty'@'localhost')只用于从本机连接时。另一个账户('monty'@'%')可用于从其它主机连接。请注意monty的两个账户必须能从任何主机以monty连接。没有localhost账户,当monty从本机连接时,mysql_install_db创建的localhost的匿名用户账户将占先。结果是,monty将被视为匿名用户。原因是匿名用户账户的Host列值比'monty'@'%'账户更具体,这样在user表排序顺序中排在前面。(user表排序的讨论要参考mysql手册)

·         一个账户有用户名admin,没有密码。该账户只用于从本机连接。授予了RELOADPROCESS管理权限。这些权限允许admin用户执行mysqladmin reloadmysqladmin refreshmysqladmin flush-xxx命令,以及mysqladmin processlist。未授予访问数据库的权限。你可以通过GRANT语句添加此类权限。

·         一个账户有用户名dummy,没有密码。该账户只用于从本机连接。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户而不授予任何权限。它可以将所有全局权限设为'N'。假定你将在以后将具体权限授予该账户。

3.直接操作MySQL授权表

    除了GRANT,你可以直接用INSERT语句创建相同的账户,然后使用FLUSH PRIVILEGES告诉服务器重载授权表。

shell> mysql --user=root mysql

mysql> INSERT INTO user
            ->             VALUES('localhost','monty',PASSWORD('some_pass'),
            ->             'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user
            ->             VALUES('%','monty',PASSWORD('some_pass'),
            ->             '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;

当你用INSERT创建账户时使用FLUSH PRIVILEGES的原因是告诉服务器重读授权表。否则,只有重启服务器后更改方会被注意到。使用 GRANT,则不需要使用FLUSH PRIVILEGES

INSERT使用PASSWORD()函数是为了加密密码。GRANT语句为你加密密码,因此不需要PASSWORD()

'Y'值启用账户权限。对于admin账户,还可以使用更加可读的INSERT扩充的语法(使用SET)。

在为dummy账户的INSERT语句中,只有user表中的HostUserPassword列记录为指定的值。没有一个权限列为显式设置,因此MySQL将它们均指定为 默认值'N'。这样等同于GRANT USAGE的操作。

请注意要设置超级用户账户,只需要创建一个权限列设置为'Y'user表条目。user表权限为全局权限,因此其它 授权表不再需要条目。

4.举几个应用grant创建帐户和授权的例子

下面的例子创建3个账户,允许它们访问专用数据库。每个账户的用户名为custom,密码为obscure

要想用GRANT创建账户,使用下面的语句:

shell> MySQL --user=root MySQL
shell> mysql --user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
            ->             ON bankaccount.*
            ->             TO 'custom'@'localhost'
            ->             IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
            ->             ON expenses.*
            ->             TO 'custom'@'whitehouse.gov'
            ->             IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
            ->             ON customer.*
            ->             TO 'custom'@'server.domain'
            ->             IDENTIFIED BY 'obscure';

3个账户可以用于:

·         1个账户可以访问bankaccount数据库,但只能从本机访问。

·         2个账户可以访问expenses数据库,但只能从主机whitehouse.gov访问。

·         3个账户可以访问customer数据库,但只能从主机server.domain访问。

要想不用GRANT设置custom账户,使用INSERT语句直接修改 授权表:

shell> mysql --user=root mysql
mysql> INSERT INTO user (Host,User,Password)
            ->             VALUES('localhost','custom',PASSWORD('obscure'));
mysql> INSERT INTO user (Host,User,Password)
            ->             VALUES('whitehouse.gov','custom',PASSWORD('obscure'));
mysql> INSERT INTO user (Host,User,Password)
            ->             VALUES('server.domain','custom',PASSWORD('obscure'));
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('server.domain','customer','custom',
            ->             'Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
 

3INSERT语句在user表中加入条目,允许用户custom从各种主机用给定的密码进行连接,但不授予全局权限(所有权限设置为 默认值'N')。后面3INSERT语句在user表中加入条目,为custom授予bankaccountexpensescustomer数据库权限,但只能从合适的主机访问。通常若直接修改 授权表,则应告诉服务器用FLUSH PRIVILEGES重载授权表,使权限更改生效。

如果你想要让某个用户从给定域的所有机器访问(例如,mydomain.com),你可以在账户名的主机部分使用含'%'通配符的GRANT语句:

mysql> GRANT ...
            ->             ON *.*
            ->             TO 'myname'@'%.mydomain.com'
            ->             IDENTIFIED BY 'mypass';

要想通过直接修改授权表来实现:

mysql> INSERT INTO user (Host,User,Password,...)
            ->             VALUES('%.mydomain.com','myname',PASSWORD('mypass'),...);

mysql> FLUSH PRIVILEGES;

5.创建账户的其它方法是使用MySQL账户管理功能的第三方程序。phpMyAdmin即是一个程序。

 

从MySQL删除用户账户

要想移除账户,应使用DROP USER语句。


-----------------赋权限------------------------

mysql> grant usage on *.* to username@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on newdb.* to username@localhost ;
Query OK, 0 rows affected (0.00 sec)

分享到:
评论

相关推荐

    mysql 赋给用户权限 grant all privileges on.docx

    本文将详细介绍 GRANT 语句的使用方法和参数说明。 GRANT 语句的基本格式为: `GRANT 权限1, 权限2, … 权限n ON 数据库名称. 表名称 TO 用户名@用户地址 IDENTIFIED BY ‘连接口令’;` 其中,权限1, 权限2, … ...

    破解Mysql账号密码的方法

    在MySQL数据库管理中,有时可能会遇到忘记账号密码的尴尬情况,这无疑会阻碍我们正常地访问和管理数据库。本文将详细介绍一种解决此类问题的方法,帮助你恢复对MySQL账户的访问。 首先,理解MySQL的密码安全机制是...

    mysql 账号权限管理命令

    MySQL 账号 权限, 用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建

    php mysql 后台账号管理系统

    总的来说,“php mysql 后台账号管理系统”是一个基础的Web应用,它利用PHP的处理能力和MySQL的数据存储能力,实现对用户账号的创建、登录、修改以及权限控制。这样的系统对于公司内部管理,特别是需要权限控制的...

    MySQL恢复root用户超级权限方法.docx

    ### MySQL恢复root用户超级权限方法 #### 背景与问题描述 在使用MySQL数据库时,如果忘记了root用户的密码或由于某些原因导致root用户失去了超级权限(即管理员权限),那么将会给数据库管理带来极大的不便。本文...

    Linux下mysql新建账号及权限设置方法

    在Linux环境下管理MySQL数据库时,创建新用户和设置权限是常见的管理任务。由于Linux和Windows系统都支持命令行操作MySQL,因此在两者之间进行用户和权限的设置基本步骤是一致的。以下将详细解释如何在Linux下的...

    MYSQL权限不够解决办法

    在深入探讨解决方法之前,首先需要了解MySQL的权限管理系统。MySQL使用基于角色的访问控制(RBAC)机制,通过定义不同的权限级别来管理用户的访问权限。这些权限级别包括全局级、数据库级、表级和列级。 - **全局级...

    mysql常用命令(建库、建用户、赋权限、备份、还原等)1

    本文介绍了MySQL中的一些常用命令,包括创建用户、删除用户、创建数据库、删除数据库、为用户赋权限、刷新权限以及备份与恢复数据库等操作。通过这些命令,你可以有效地管理和维护MySQL数据库系统。在实际应用中,...

    MySQL数据库设置远程访问权限方法总结.pdf

    MySQL数据库设置远程访问权限方法总结 MySQL数据库设置远程访问权限是关系型数据库管理系统中的一个重要问题。本文将详细介绍如何设置MySQL数据库的远程访问权限,并提供了一些相关的安全策略和Best Practice。 ...

    更新MySql权限.zip

    1. **使用说明.txt**:这个文件应该提供了关于如何使用这个工具的详细步骤和注意事项,包括如何运行批处理文件以及可能遇到的问题和解决方法。 2. **开通MySQL权限.bat**:这是一个批处理文件,用于自动执行一系列...

    mysql 远程root权限

    本文将深入探讨“MySQL远程root权限”的概念、实现方法以及相关的安全注意事项。 #### 一、理解MySQL中的root用户 1. **root用户的权限**: - 在MySQL中,`root`是最具权限的用户账号,默认情况下拥有对所有...

    mysql开启远程连接权限

    ### MySQL开启远程连接权限 在本篇文章中,我们将详细介绍如何通过命令行的方式,在Windows系统上为MySQL数据库开启远程连接权限。对于需要从不同位置管理数据库的用户来说,这是一个非常实用的功能。下面,我们将...

    mysql开启远程访问权限和被远程访问的方法.docx

    MySQL远程访问权限和被远程访问的方法 在 MySQL 中,开启远程访问权限和被远程访问是非常重要的步骤。本文将详细介绍如何在 MySQL 中开启远程访问权限和被远程访问的方法。 一、使用root账户登录MySQL 首先,我们...

    c# 基于MySQL的通用权限框架(完整源码)

    本项目以C#作为主要编程语言,利用MySQL数据库存储和管理用户权限,旨在提供一个完整的、可复用的解决方案。下面我们将详细探讨这个框架涉及的主要知识点。 首先,我们要理解C#作为.NET平台的主要编程语言,它提供...

    MySql数据库账号密码过期导致Navicat连接不上.docx

    ### MySQL数据库账号密码过期问题...具体操作方法需根据实际情况选择,同时注意遵循信息安全规范,保障数据库的安全性和稳定性。对于管理员账号密码过期的情况,推荐优先采用本地登录方式处理,以避免潜在的安全风险。

    整理了以下四种在MySQL中修改root密码的方法

    本文将介绍四种在 MySQL 中修改 root 密码的方法,帮助大家更好地管理和维护 MySQL 数据库。 方法 1:使用 SET PASSWORD 命令 使用 SET PASSWORD 命令可以直接修改 root 密码。具体操作步骤如下: 1. 打开 MySQL ...

    远程用户连接mysql授权

    本文将详细介绍如何为远程用户授权访问MySQL服务器的方法。 #### 二、远程用户连接MySQL授权原理 在MySQL中,每个用户的权限是根据其来源主机地址来确定的。这意味着即使是同一个用户名,从不同的主机登录时所拥有...

Global site tag (gtag.js) - Google Analytics