mysql怎么访问用户B_MySQL访问控制和用户管理

访问控制

你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。

多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表;

某些用户需要读表,但可能不需要更新表;

你可能想允许用户添加数据,但不允许他们删除数据;

某些用户(管理员)可能需要处理用户账号的权限,但多数用户不需要;

你可能想让用户通过存储过程访问数据,但不允许他们直接访问数据;

你可能想根据用户登录的地点限制对某些功能的访问。

不要使用root 应该严肃对待root登录的使用。仅在绝对需要时使用它(或许在你不能登录其他管理账号时使用)。不应该在日常的MySQL操作中使用root。

管理用户

mysql> USE mysql;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> SELECT user FROM user;

+------------------+

| user |

+------------------+

| debian-sys-maint |

| mysql.infoschema |

| mysql.session |

| mysql.sys |

| root |

+------------------+

5 rows in set (0.00 sec)

mysql数据库有一个名为user的表,它包含所有用户账号。user表有一个名为user的列,它存储用户登录名。

创建用户账号

mysql> CREATE USER ben IDENTIFIED BY 'p@$$w0rd';

Query OK, 0 rows affected (0.06 sec)

CREATE USER创建一个新用户账号。在创建用户账号时不一定需要口令。

指定散列口令 IDENTIFIED BY指定的口令为纯文本,MySQL将在保存到user表之前对其进行加密。为了作为散列值指定口令,使用IDENTIFIED BY PASSWORD。

使用GRANT或INSERT GRANT语句(稍后介绍)也可以创建用户账号,但一般来说CREATE USER是最清楚和最简单的句子。此外,也可以通过直接插入行到user表来增加用户,不过为安全起见,一般不建议这样做。MySQL用来存储用户账号信息的表(以及表模式等)极为重要,对它们的任何毁坏都可能严重地伤害到MySQL服务器。因此,相对于直接处理来说,最好是用标记和函数来处理这些表。

重命名账户

mysql> RENAME USER ben TO bforta;

Query OK, 0 rows affected (0.01 sec)

MySQL 5之前 仅MySQL 5或之后的版本支持RENAME USER。为了在以前的MySQL中重命名一个用户,可使用UPDATE直接更新user表。

删除用户账号

mysql> DROP USER bforta;

Query OK, 0 rows affected (0.00 sec)

在MySQL 5以前,DROP USER只能用来删除用户账号,不能删除相关的权限。因此,如果使用旧版本的MySQL,需要先用REVOKE删除与账号相关的权限,然后再用DROP USER删除账号。

设置访问权限

SHOW GRANTS FOR username@localhost;

为看到赋予用户账号的权限,使用SHOW GRANTS FOR。

用户定义为user@host MySQL的权限用用户名和主机名结合定义。如果不指定主机名,则使用默认的主机名%(授予用户访问权限而不管主机名)。

为设置权限,使用GRANT语句。GRANT要求你至少给出以下信息:

要授予的权限;

被授予访问权限的数据库或表;

用户名。

GRANT SELECT ON crashcourse.* TO bforta;

此GRANT允许用户在crashcourse.*(crashcourse数据库的所有表)上使用SELECT。通过只授予SELECT访问权限,用户bforta对crashcourse数据库中的所有数据具有只读访问权限。

GRANT的反操作为REVOKE,用它来撤销特定的权限。

REVOKE SELECT ON crashcourse.* FROM bforta;

这条REVOKE语句取消刚赋予用户bforta的SELECT访问权限。被撤销的访问权限必须存在,否则会出错。

GRANT和REVOKE可在几个层次上控制访问权限:

整个服务器,使用GRANT ALL和REVOKE ALL;

整个数据库,使用ON database.*;

特定的表,使用ON database.table;

特定的列;

特定的存储过程。

列出可以授予或撤销的每个权限。

权 限

说 明

ALL

除GRANT OPTION外的所有权限

ALTER

使用ALTER TABLE

ALTER ROUTINE

使用ALTER PROCEDURE和DROP PROCEDURE

CREATE

使用CREATE TABLE

CREATE ROUTINE

使用CREATE PROCEDURE

CREATE TEMPORARY TABLES

使用CREATE TEMPORARY TABLE

CREATE USER

使用CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES

CREATE VIEW

使用CREATE VIEW

DELETE

使用DELETE

DROP

使用DROP TABLE

EXECUTE

使用CALL和存储过程

FILE

使用SELECT INTO OUTFILE和LOAD DATA INFILE

GRANT OPTION

使用GRANT和REVOKE

INDEX

使用CREATE INDEX和DROP INDEX

INSERT

使用INSERT

LOCK TABLES

使用LOCK TABLES

PROCESS

使用SHOW FULL PROCESSLIST

RELOAD

使用FLUSH

REPLICATION CLIENT

服务器位置的访问

REPLICATION SLAVE

由复制从属使用

SELECT

使用SELECT

SHOW DATABASES

使用SHOW DATABASES

SHOW VIEW

使用SHOW CREATE VIEW

SHUTDOWN

使用mysqladmin shutdown(用来关闭MySQL)

SUPER

使用CHANGE MASTER、KILL、LOGS、PURGE、MASTER和SET GLOBAL。还允许mysqladmin调试登录

UPDATE

使用UPDATE

USAGE

无访问权限

未来的授权 在使用GRANT和REVOKE时,用户账号必须存在,但对所涉及的对象没有这个要求。这允许管理员在创建数据库和表之前设计和实现安全措施。这样做的副作用是,当某个数据库或表被删除时(用DROP语句),相关的访问权限仍然存在。而且,如果将来重新创建该数据库或表,这些权限仍然起作用。

简化多次授权 可通过列出各权限并用逗号分隔,将多条GRANT语句串在一起

更改口令

mysql> SET PASSWORD FOR bforta=PASSWORD ('P@ssW0rd');

Query OK, 0 rows affected (0.01 sec)

SET PASSWORD更新用户口令。新口令必须传递到Password()函数进行加密。

SET PASSWORD还可以用来设置你自己的口令

mysql> SET PASSWORD =PASSWORD ('P@ssW0rd');

Query OK, 0 rows affected (0.01 sec)

在不指定用户名时,SET PASSWORD更新当前登录用户的口令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值