mysql创建用户, 并配置一个库的所有权限
在MySQL中,创建用户并为其授予某个库的所有权限,可以按照以下步骤操作:
1.登录MySQL服务器。
mysql -u root -p
2.创建新用户。
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'user_password';
其中,new_user是新用户的名称,localhost是该用户的登录主机,user_password是该用户的密码。
其中: MySQL中的"localhost"和"%"都是用来指定MySQL允许访问服务器的主机名。但是,它们之间存在一些重要的区别:
- “localhost"只允许本地连接,而”%"允许所有IP地址都可以连接到服务器。
- 在安全性方面,“localhost"比”%“更安全,因为它只允许本地用户连接到MySQL服务器,而”%"可能会允许外部用户连接,从而增加了安全风险。
- “localhost"是默认的主机名,所以通常不需要指定,而”%"需要明确指定才能允许所有主机的连接。
综上所述,“localhost"和”%“都有各自的优点和缺点,具体使用应根据具体情况和需要进行选择。如果只允许本地访问,建议使用"localhost”,如果需要允许来自所有主机的访问,则应该使用"%"。
3.授予该用户在数据库中的所有权限。
GRANT ALL PRIVILEGES ON database_name.* TO 'new_user'@'localhost';
FLUSH PRIVILEGES;
在这个语句中,ALL PRIVILEGES授权了该用户在指定数据库中进行所有操作的权限。database_name.*授权该用户对指定数据库的所有表和视图都具有完全的权限。FLUSH PRIVILEGES命令用于刷新权限,以确保MySQL的权限系统已更新。
现在,新用户已被创建并被授权对指定数据库的所有表进行所有操作。当然,如果需要的话,可以调整授予的具体权限范围。
3.1 权限的分类以及怎么给用户赋予不同权限
MySQL有许多种权限,包括全局权限、数据库级别权限、表级别权限、列级别权限等。在MySQL中,可以通过授权命令(grant)来给用户不同的权限。
授权命令的语法如下:
GRANT privileges ON object TO 'user'@'localhost' [IDENTIFIED BY [PASSWORD] 'password']
其中,privileges表示授权给用户的权限,object表示将权限授予的对象(比如database_name.*),user表示被授权的用户,IDENTIFIED BY 'password’表示设置用户密码(这一步可以省略)。
MySQL中常见的权限包括:
- ALL PRIVILEGES:拥有所有权限
- ALTER:修改已经存在的表结构,但不能修改表名称和删除表
- CREATE:创建新的数据库和表
- DELETE:删除表中的数据
- DROP:删除已经存在的数据库和表
- INSERT:插入新数据到表中
- SELECT:从表中选取数据
- UPDATE:更新表中的数据
例如,通过以下命令给用户’username’授予访问’database_name’库中所有表的SELECT和INSERT权限:
GRANT SELECT, INSERT ON database_name.* TO 'username'@'localhost';
4.显示mysql所有用户以及权限
在MySQL中,可以使用以下查询语句来查看所有用户及其权限:
SELECT user, host, authentication_string FROM mysql.user;
结果如下
该查询语句返回三个列:user表示用户名,host表示用户所在的主机,authentication_string表示该用户的加密密码或者密码哈希值。
为了查看每个用户的具体权限,可以使用以下语句:
SHOW GRANTS FOR 'user_name'@'host_name';
该语句将显示指定用户在特定主机上授予的权限。注意,密码哈希值在授权语句中是不可见的。
执行之后会出现:
+-----------------------------------------------------------------------------------------------+
| Grants for user_name@host_name |
+-----------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_name'@'host_name' IDENTIFIED BY PASSWORD 'password_hash' |
| GRANT SELECT, INSERT, UPDATE ON `testdb`.* TO 'user_name'@'host_name' |
| GRANT CREATE ON `sampledb`.* TO 'user_name'@'host_name' |
+-----------------------------------------------------------------------------------------------+
例如,上述结果表明user_name
在host_name
上拥有以下权限:
- 对所有的数据库和所有的表都拥有 USAGE 权限
- 对
testdb
库下的所有表具有SELECT
、INSERT
和UPDATE
权限 - 对
sampledb
库下的所有表具有CREATE
权限
如果想查看所有用户的权限,可以使用以下语句:
SELECT DISTINCT CONCAT('SHOW GRANTS FOR \'', user, '\'@\'', host, '\';') AS query FROM mysql.user;
该语句将为每个用户构建SHOW GRANTS语句,并将其作为查询结果返回。可以将查询结果拷贝到命令行中执行,以查看每个用户的具体权限。