一、mysql数据库创建普通用户并赋予权限
1.创建用户并赋予权限
在MySQL数据库中创建一个普通账号,您需要使用CREATE USER
语句来创建用户,然后使用GRANT
语句来为该用户分配权限。以下是一个基本的示例:
- 登录到MySQL服务器
首先,您需要以具有足够权限的用户(通常是root用户)登录到MySQL服务器。
mysql -u root -p
- 创建新用户账号
在MySQL命令行客户端中,使用以下SQL语句来创建一个新用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
-
username
是您想要创建的用户名。 -
host
是该用户可以连接的MySQL服务器地址。如果允许从任何主机连接,可以使用%
。例如,'username'@'%'
。 -
password
是该用户的密码。
例如,创建一个名为newuser
,密码为userpassword
,并且允许从任何主机连接的账号:
CREATE USER 'newuser'@'%' IDENTIFIED BY 'userpassword';
- 为用户分配权限
创建用户后,您需要为该用户分配适当的权限。使用GRANT
语句来完成这一步。
例如,如果您希望该用户能够访问特定的数据库mydatabase
,并且具有所有权限,可以使用以下语句:
GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'%';
如果您只想给用户有限的权限,例如只读权限,可以使用:
GRANT SELECT ON mydatabase.* TO 'newuser'@'%';
如果您只想给用户有限的权限,例如增删改查权限,可以使用:
GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'newuser'@'%';
- 刷新权限
执行FLUSH PRIVILEGES
命令来确保权限立即生效:
FLUSH PRIVILEGES;
- 退出MySQL命令行
完成以上步骤后,您可以使用EXIT
命令退出MySQL命令行:
EXIT;
现在,您已经创建了一个新的MySQL用户账号,并且分配了相应的权限。该用户可以尝试使用提供的凭据连接到MySQL服务器,并访问授权的数据库。
2.查看所创建的用户
要查看在MySQL数据库中创建的用户,您可以使用SHOW USERS
命令或者查询mysql.user
系统数据库表。以下是两种方法的示例:
方法1:使用SHOW USERS
命令
在MySQL命令行客户端中,执行以下命令:
SHOW USERS;
或者,如果您想要查看更详细的信息,可以使用:
SHOW FULL USERS;
方法2:查询mysql.user
表
您也可以直接查询mysql
数据库中的user
表来查看所有用户及其相关信息。在MySQL命令行客户端中,执行以下命令:
USE mysql;
SELECT User, Host, Password FROM user;
这将显示所有用户的用户名(User)、允许连接的主机(Host)和加密后的密码(Password)。
注意事项
-
SHOW USERS
命令可能不适用于所有版本的MySQL,特别是在较旧的版本中。在这种情况下,请使用查询mysql.user
表的方法。 -
Password
列显示的是加密后的密码,因此您看到的不会是明文密码。 - 如果您使用的是MySQL 5.7或更高版本,密码字段可能会显示为
authentication_string
而不是Password
。
确保您以具有足够权限的用户(如root)登录,才能查看其他用户的账户信息。如果您没有足够的权限,可能会遇到权限拒绝的错误。
3.修改所创建的用户密码
在MySQL数据库中,您可以使用SET PASSWORD
语句或者ALTER USER
语句来修改用户的密码。以下是两种方法的示例:
方法1:使用SET PASSWORD
语句
要以root用户或具有足够权限的用户登录MySQL服务器,然后使用以下命令来修改另一个用户的密码:
mysql -u root -p
在MySQL命令行客户端中,执行以下命令:
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
-
username
是您想要修改密码的用户名。 -
host
是该用户可以连接的MySQL服务器地址。如果允许从任何主机连接,可以使用%
。 -
newpassword
是新密码。
例如,修改用户newuser
的密码:
SET PASSWORD FOR 'newuser'@'%' = PASSWORD('newpassword');
方法2:使用ALTER USER
语句
您也可以使用ALTER USER
语句来修改密码:
ALTER USER 'username'@'host' IDENTIFIED BY 'newpassword';
例如:
ALTER USER 'newuser'@'%' IDENTIFIED BY 'newpassword';
注意事项
-
PASSWORD('newpassword')
函数用于加密密码。在MySQL 8.0及更高版本中,您可以直接使用明文密码,而不需要PASSWORD()
函数。 - 在修改密码后,您可能需要执行
FLUSH PRIVILEGES
命令来确保权限立即生效,尤其是在旧版本的MySQL中。
完成密码修改后,您可以使用EXIT
命令退出MySQL命令行:
EXIT;
现在,用户newuser
将使用新密码newpassword
来连接到MySQL服务器。请确保在操作过程中拥有足够的权限,并且妥善保管好密码信息。
二、Mongodb数据库创建用户并赋予权限
1.创建账号并赋予权限
在MongoDB中,要赋予普通用户增删改查(CRUD)权限,您可以使用readWrite
角色。这个角色允许用户在指定的数据库中进行读取和写入操作,包括插入、更新和删除文档。
以下是如何为用户赋予readWrite
角色的步骤:
- 切换到管理员数据库
use admin
- 以用户管理员身份登录(如果尚未登录)
mongo -u userAdmin -p password --authenticationDatabase admin
- 创建普通用户并赋予权限
假设您要在mydatabase
数据库上为用户newUser
赋予readWrite
权限,您可以这样做:
use mydatabase
db.createUser({
user: "newUser",
pwd: "userpassword",
roles: [{ role: "readWrite", db: "mydatabase" }]
})
这里的readWrite
角色将允许newUser
在mydatabase
数据库中进行插入、更新、读取和删除操作。
- 验证用户权限
创建用户后,您可以尝试以该用户身份登录,以验证权限是否已正确分配。
mongo -u newUser -p userpassword --authenticationDatabase mydatabase
确保在执行这些操作时,您已经以具有足够权限的用户(如root或用户管理员)登录,并且您的MongoDB实例配置了适当的安全设置,如启用访问控制等。
如果您需要更细粒度的权限控制,MongoDB还提供了其他内置角色,如read
、readWrite
、dbAdmin
、clusterAdmin
等,以及自定义角色的能力。
2.在项目中使用普通账号连接mongodb
如果您使用的是 mongoengine
,一个与MongoDB集成的Python ORM库,那么您需要确保在创建连接时正确地设置了认证数据库。在 mongoengine
中,您通常会在初始化时设置连接,例如:
from mongoengine import connect
connect(
db=MONGO_DBNAME,
host=MONGO_HOST,
port=MONGO_PORT,
username=MONGO_USERNAME,
password=MONGO_PASSWORD,
authentication_source='toolchain-mongodb' # 指定认证数据库
)
在上面的代码中,authentication_source
参数用于指定认证数据库。确保您已经将 MONGO_DBNAME
、MONGO_HOST
、MONGO_PORT
、MONGO_USERNAME
和 MONGO_PASSWORD
替换为实际的值。
如果您在连接时遇到认证错误,请检查以下几点:
- 环境变量或配置文件:
- 确保所有配置参数都是正确的,并且已经正确地注入到您的应用程序中。
- 认证数据库:
- 确保您在创建用户时指定的认证数据库与
authentication_source
参数中的值匹配。
- 错误日志:
- 查看应用程序的日志文件,以获取关于认证失败的更多详细信息。这可能会提供解决问题所需的线索。
- MongoDB服务器配置:
- 确保MongoDB服务器已经启用认证,并且配置了正确的用户和角色。
- 客户端驱动版本:
- 确保您使用的
mongoengine
版本与MongoDB服务器版本兼容。
- 连接字符串格式:
- 如果您使用的是连接字符串,确保格式正确,并且包含了所有必要的参数。
如果您的配置看起来是正确的,但是仍然遇到问题,您可能需要检查MongoDB服务器的日志,以查看是否有关于认证失败的更详细的错误信息。此外,您还可以尝试使用MongoDB客户端(如mongo
shell)以相同的凭据手动连接,以验证是否能够成功连接。如果手动连接成功,那么问题可能出在您的应用程序配置或代码中。如果手动连接也失败,那么问题可能出在MongoDB服务器的配置或用户账户上。