问题:
为了数据库的安全,设置特定用户访问数据库或者数据库表的权限?
解决方法:
1、新增数据库用户数据
方式1:
// 添加无限制访问用户以及密码
CREATE USER 'your_username'@'%' IDENTIFIED BY 'your_password';
// 添加本地访问用户以及密码
CREATE USER 'your_username'@'localhost' IDENTIFIED BY 'your_password';
注:
user 是用户的名称,host 设置用户连接的方式;host:% 表示无限制(允许任何主机)登录数据库;localhost 表示服务器本地登录数据库 指定ip 表示指定某个ip终端访问数据库。还有人把host 设置成127.0.0.1,与localhost类似,但是两个存在着明显区别。
mysql -h 127.0.0.1 的时候,使用 TCP/IP 连接, mysql server 认为该连接来自于127.0.0.1或者是"localhost.localdomain"
mysql -h localhost 的时候,是 不使用TCP/IP 连接的,而使用 Unix socket ;此时,mysql server则认为该client是来自"localhost"
mysql权限管理中的"localhost"有特定含义:
需要根据自己的环境设置成localhost 还是选择127.0.0.1 ; 这个我们后面再说明。
方式2:
通过sql 写入mysql user 表中
INSERT INTO `mysql`.`user` (`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed`, `password_lifetime`, `account_locked`) VALUES ('%', 'testadmin', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'N', '2021-12-01 22:15:24', NULL, 'N');
2、用户授权(grant)
grant Alter, Create, Delete, Drop, INDEX, Insert, Select, Update on `your_db_name`.* TO 'your_username'@'%';
// Alter, Create, Delete, Drop, INDEX, Insert, Select, Update 用户操作数据库或者数据库表的具体权限;
// `your_db_name`.* :表示`your_db_name`库下所有的表的权限都赋予 ;
// `your_db_name`.table_name :表示`your_db_name`库下table_name表权限的赋予 ;
或者 授予用户数据库表的全部权限 ,不需要一个个授予;如下:
grant All privileges on `your_db_name`.* TO 'your_username'@'%';
// All privilege :表示全部权限
授予全部数据库表的全部权限 ,不需要一个个授予;如下:
grant All privileges on *.* TO 'your_username'@'%';
// All privilege :表示全部权限
mysql> grant all privileges on `apple_cms`.ac_actor TO 'testadmin'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
如图效果
3、刷新MySQL的系统权限相关表,或者重启数据库服务
flush privileges; // sql 命令
或者
systemctl restart mysql ;// linux 命令 不同版本linux 命令不同,根据自己服务器而定,切勿死记
4、撤销用户权限(REVOKE)
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
注: 删除用户的对应的表或者库的权限
5、删除用户
根据条件删除指定的用户
drop user your_name
DROP USER 'your_username'@'host';
DROP USER 'your_username'@'%';
综上就可以自己设置用户的访问操作权限 ,
评论 (0)