总结:用户具有的权限:
1 *.*,时,登录数据库时候,show databaseS(),显示全部,select database() 为NULL.
2 TEST.*,登录时候时,show databaseS(),显示test和基础信息库,select database() 为NULL.
3 \c 退出当前编辑 。
1、连接Mysql
格式: mysql -h主机地址 -P you_port -u用户名 -p用户密码
1、连接到本机上的MYSQL。
首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。
如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>
2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -u root -p123;(注:u与root之间可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
2、创建用户赋权
创建用户语法如下:
CREATE USER [IF NOT EXISTS] user [auth_option] [, user [auth_option]] ... [REQUIRE {NONE | tls_option [[AND] tls_option] ...}] [WITH resource_option [resource_option] ...] [password_option | lock_option] ... ALTER USER [IF EXISTS] user [auth_option] [, user [auth_option]] ... [REQUIRE {NONE | tls_option [[AND] tls_option] ...}] [WITH resource_option [resource_option] ...] [password_option | lock_option] ... ALTER USER [IF EXISTS] USER() IDENTIFIED BY 'auth_string' -- 身份验证,默认由default_authentication_plugin系统变量定义的身份验证插件和空密码 auth_option: { IDENTIFIED BY 'auth_string' #将帐户身份验证插件设置为默认插件,将明文值传递给该插件以进行可能的散列,并将结果存储在系统表的帐户行中 | IDENTIFIED WITH auth_plugin #将帐户身份验证插件设置为auth_plugin,将凭据清除为空字符(这些凭证与旧的认证插件相关联,而不是与新认证插件相关联),并将结果存储在mysql.user系统表的帐户行中,此外,密码标记为已过期。下次连接时,用户必须选择一个新的。 | IDENTIFIED WITH auth_plugin BY 'auth_string' #将帐户身份验证插件设置为 auth_plugin,将明文值auth_string传递给该插件以进行可能的散列,并将结果存储在系统表的帐户行中 | IDENTIFIED WITH auth_plugin AS 'auth_string' #将帐户认证插件设置为auth_plugin,并将'auth_string'值存储为mysql中的值。用户帐户行。如果插件需要哈希字符串,则假定该字符串已经按照插件要求的格式进行了哈希处理 | IDENTIFIED BY PASSWORD 'auth_string' } -- SSL/TLS加密 默认NONE tls_option: { SSL #告诉服务器仅允许该语句命名的所有帐户的加密连接 | X509 #要求客户端提供一个有效的证书,但是确切的证书、颁发者和主题并不重要。惟一的要求是,应该能够使用一个CA证书来验证其签名。
使用X.509证书总是意味着加密,因此在这种情况下没有必要使用SSL选项。对于具有REQUIRE X509的帐户,客户必须指定--ssl-key和--ssl-cert选项进行连接。(建议但不要求 --ssl-ca也进行指定,以便可以验证服务器提供的公共证书。)这对ISSUER和SUBJECT且也是如此,因为这些REQUIRE选项暗示了的要求X509 | CIPHER 'cipher' #需要一个特定的加密连接的密码方法。为了确保使用了足够强度的密码和密钥长度,需要使用此选项。如果使用使用短加密密钥的旧算法,加密可能会很弱。 | ISSUER 'issuer' #要求客户端出示由CA颁发的有效X.509证书 。如果客户端出示的证书有效但具有不同的颁发者,则服务器将拒绝连接 | SUBJECT 'subject' #要求客户端提供一个包含subject主题的有效X.509证书。如果客户端提供的证书是有效的,但具有不同的主题,则服务器拒绝连接。MySQL对“subject”值与证书中的值会进行简单的字符串比较,因此字母大小写和组件顺序必须与证书中给出的完全一致 } -- 资源限制默认0无限制 resource_option: { MAX_QUERIES_PER_HOUR count #每小时允许每个帐户进行count次查询 | MAX_UPDATES_PER_HOUR count #每小时允许每个帐户进行count次更新 | MAX_CONNECTIONS_PER_HOUR count #每小时允许每个帐户进行count次连接 | MAX_USER_CONNECTIONS count #限制每个帐户同时连接到服务器的最大数量为count,如果count为0,则服务器根据max_user_connections系统变量的全局值确定该帐户的并发连接数 。如果max_user_connections也为零,则该帐户没有限制。 } -- 密码管理,过期策略 默认为PASSWORD EXPIRE DEFAULT;支持多个密码过期管理的password_option值。策略选项不会使密码过期,服务器会根据帐户密码使用期限对帐户应用自动过期;在密码过期后的下次连接时要重新设置密码 password_option: { PASSWORD EXPIRE #将密码标记为过期 | PASSWORD EXPIRE DEFAULT #使账号应用default_password_lifetime指定的全局到期策略 | PASSWORD EXPIRE NEVER #会覆盖账号到期的全局策略。对于每个密码,它都会禁用密码过期,以便密码永不过期。 | PASSWORD EXPIRE INTERVAL N DAY #将密码有效期设置为N几天 } -- 用户是否锁定 默认为ACCOUNT UNLOCK lock_option: { ACCOUNT LOCK | ACCOUNT UNLOCK }
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password' PASSWORD EXPIRE;
ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH sha256_password BY 'new_password' PASSWORD EXPIRE INTERVAL 180 DAY;
ALTER USER 'jeffrey'@'localhost' ACCOUNT LOCK;
ALTER USER 'jeffrey'@'localhost' ACCOUNT UNLOCK;
要求一个帐户使用SSL进行连接并每小时只允许建立20个连接:
ALTER USER 'jeffrey'@'localhost' REQUIRE SSL WITH MAX_CONNECTIONS_PER_HOUR 20;
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password', 'jeanne'@'localhost' REQUIRE SSL WITH MAX_USER_CONNECTIONS 2;
ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
ALTER USER 'jeffrey'@'localhost' REQUIRE ISSUER '/C=SE/ST=Stockholm/L=Stockholm/O=MySQL/CN=CA/emailAddress=ca@example.com'; ALTER USER 'jeffrey'@'localhost' REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/O=MySQL demo client certificate/CN=client/emailAddress=client@example.com';
ALTER USER 'jeffrey'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'; ALTER USER 'jeffrey'@'localhost' REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/O=MySQL demo client certificate/CN=client/emailAddress=client@example.com' AND ISSUER '/C=SE/ST=Stockholm/L=Stockholm/O=MySQL/CN=CA/emailAddress=ca@example.com' AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
删除y用户
DROP USER [IF EXISTS] user [, user] ...
DROP USER 'jeffrey'@'localhost';
修改用户名
RENAME USER old_user TO new_user [, old_user TO new_user] ...;
用户权限grant
t
- 账号首次创建时没有权限,需要使用GRANT进行分配
- GRANT支持最多60个字符的主机名,用户名最多可以包含32个字符,数据库,表,列和例程的名称最多可以包含64个字符
- GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user [auth_option] [, user [auth_option]] ... [REQUIRE {NONE | tls_option [[AND] tls_option] ...}] [WITH {GRANT OPTION | resource_option} ...] GRANT PROXY ON user TO user [, user] ... [WITH GRANT OPTION] object_type: { TABLE | FUNCTION | PROCEDURE } priv_level: { * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name } auth_option: { IDENTIFIED BY 'auth_string' | IDENTIFIED WITH auth_plugin | IDENTIFIED WITH auth_plugin BY 'auth_string' | IDENTIFIED WITH auth_plugin AS 'auth_string' | IDENTIFIED BY PASSWORD 'auth_string' } tls_option: { SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject' } resource_option: { | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count }
全局权限是管理性的,适用于给定服务器上的所有数据库。要分配全局特权,使用ON *.*语法;其他特权可以全局授予,也可以在特定的级别授予
GRANT ALL ON *.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';
- SUPER:允许使用其他管理操作,如CHANGE MASTER TO、KILL、PURGE BINARY LOGS、SET GLOBAL和mysqladmin调试命令
- FILE:允许使用服务器读取或写入文件
- RELOAD:允许FLUSH操作
- PROCESS:允许用户使用SHOW PROCESSLIST查看所有进程
- SHUTDOWN:允许使用mysqladmin关机
- CREATE USER:允许使用CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES
- SHOW DATABASES:显示所有数据库
- REPLICATION SLAVE:使副本能够从源读取二进制日志事件
- CREATE TABLESPACE:允许创建、修改或删除表空间和日志文件组
- REPLICATION CLIENT:允许用户查询源服务器或副本服务器在哪里
- 表权限
-
表特权适用于给定表中的所有列。表权限适用于基表和视图,不适用于临时表。要分配表级特权,使用语法: ON db_name.tbl_name
-
GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost'; GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';
- DROP:允许删除表和视图
- ALTER:允许修改表
- INDEX:允许创建和删除索引
- CREATE:允许创建
- DELETE:允许删除
- INSERT:允许插入数据
- SELECT:允许查询
- UPDATE:允许更新
- TRIGGER:允许操作触发器
- SHOW VIEW:允许使用SHOW CREATE VIEW
- REFERENCES:允许创建外键表
- CREATE VIEW:允许创建和更改视图
- GRANT OPTION:允许授予其他帐户权限或从其他帐户中删除的权限
- CREATE ROUTINE:允许创建存储程序
-
列权限
列特权适用于给定表中的单个列。在列级别要授予的每个特权都必须在权限后加上括号和一个或多个列
-
GRANT SELECT (col1), INSERT (col1, col2) ON mydb.mytbl TO 'someuser'@'somehost';
- INSERT:允许插入数据
- UPDATE:允许更新
- SELECT:允许查询
- REFERENCES:允许创建外键表
存储程序权限
适用于存储例程(过程和函数)。可以在全局和数据库级别授予它们。可以在存储程序级别为单个存储程序授予这些特权
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';
代理用户权限
使一个用户可以成为另一个用户的代理。代理用户模拟或获取代理用户的权限
GRANT PROXY ON 'localuser'@'localhost' TO 'externaluser'@'somehost';
当PROXY被授予时,它必须是GRANT语句中的唯一权限,唯一允许的WITH选项是WITH GRANT OPTION。
代理要求代理用户通过插件进行身份验证,该插件在代理用户连接时将代理用户的名称返回到服务器,并且代理用户必须具有PROXY特权的代理用户。
- EXECUTE:允许执行存储程序
- GRANT OPTION:允许授予其他帐户权限或从其他帐户中删除的权限
- ALTER ROUTINE:允许修改和删除
隐式帐户创建
如果在GRANT 语句中命名的帐户不存在,则采取的操作取决于 NO_AUTO_CREATE_USERSQL模式:
如果NO_AUTO_CREATE_USER未启用,则GRANT将创建帐户。除非您使用IDENTIFIED BY指定非空密码,否则这是非常不安全的。
如果NO_AUTO_CREATE_USER启用,则GRANT失败,并且不会创建帐户,除非您使用IDENTIFIED BY来指定非空密码或使用IDENTIFIED WITH来命名身份验证插件。如果该帐户已经存在,IDENTIFIED WITH则被禁止,因为该帐户仅在创建新帐户时使用。
分配权限时可以在主机名中指定通配符。例如,'user_name'@'%.example.com'适用于example.com域中任何主机的user_name,而'user_name'@'198.51.100.%'适用于198.51.100类C子网中的任何主机的user_name。
MySQL在用户名中不支持通配符。要引用匿名用户,请使用以下GRANT语句指定一个用户名为空的帐户 :
GRANT ALL ON test.* TO ''@'localhost' ...;
撤销用户权限
方法1:必须具有GRANT OPTION 权限,并且必须具有要撤消的权限。
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
REVOKE PROXY ON user
FROM user [, user] ...
方法2:将删除一个或多个指定用户的所有全局,数据库,表,列和存储过程权限的所有权限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
mysql> create user 'nmosdb'@'%' identified by "123"; Query OK, 0 rows affected (0.00 sec) mysql> grant select,create,alter,delete,update on monidb.* to 'nmosdb'@'%'; Query OK, 0 rows affected (0.00 sec) |
3 修改密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
Set password for nmosdb@’%’ =password(‘123’);
Flush privileges
mysql> set password for nmosdb@'%'=password('123');
Query OK, 0 rows affected, 1 warning (0.04 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
mysql>
1、给root加个密码ab12。
首先在DOS下进入目录mysql\bin,然后键入以下命令
mysqladmin -u root -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、再将root的密码改为djg345。
mysqladmin -u root -p ab12 password djg345
C:\Program Files>mysqladmin -uroot -p123 password cmcc#2018
C:\Program Files>mysql -uroot -pcmcc#2018
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.0.77-community-nt MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
添加用户
1 用户分两类
a 用户名@'localhost'
b 用户名@'%'
root用户操作 create user 'jack'@'localhost' identified by 'jack'; mysql> create user 'jack'@'localhost' identified by 'jack'; mysql> grant select on kpidb.* to jack@localhost;
mysql> create user j@'%' identified by "123"; mysql> grant select,update on nmosdb.* to j@'%'; |
增加一个用户kpidb密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on test.* to kpidb@'%' Identified by “abc”;
增加一个用户kpidb密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on test.* to kpidb@localhost Identified by “abc”;
mysql> use mysql
ERROR 1044 (42000): Access denied for user 'nmosdb'@'localhost' to database 'mys
ql'
C:\Users\Administrator>mysql -h localhost -unpmdb -p123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.0.77-community-nt MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use mysql
Database changed
mysql>
删除用户
drop user nmosdb@'%' ;