PHP 是一种常用的服务器端脚本语言,而 MongoDB 则是一个高性能的 NoSQL 数据库,在实际开发中,我们可能会遇到 PHP 连接 MongoDB 时权限不够的问题,这个问题可能是由于 MongoDB 服务端的配置不正确导致的,本篇文章将详细介绍如何解决 PHP 连接 MongoDB 权限不够的问题。

克山网站建设公司创新互联,克山网站设计制作,有大型网站制作公司丰富经验。已为克山近1000家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的克山做网站的公司定做!
1、MongoDB 服务端的配置文件中的用户名和密码设置错误。
2、MongoDB 服务端的用户没有足够的权限访问数据库。
3、PHP 代码中的连接字符串设置错误。
4、PHP 进程的用户没有足够的权限访问 MongoDB 服务端。
1、检查 MongoDB 服务端的配置文件(如 mongod.conf)中的用户名和密码设置是否正确,如果不正确,请修改为正确的用户名和密码。
{
"security": {
"authorization": "disabled"
},
"systemLog": {
"verbosity": "error"
},
"replication": {
"authSource": "admin"
},
"net": {
"bindIp": "127.0.0.1",
"port": 27017
}
}
在这个配置文件中,我们可以看到 security 字段被设置为 disabled,表示禁用了安全认证,如果你需要启用安全认证,可以将其修改为 enabled,并设置相应的用户名和密码,确保 authSource 字段指向了正确的数据库,通常是 admin。
2、MongoDB 服务端的用户没有足够的权限访问数据库,你需要为该用户分配相应的权限,可以使用以下命令查看当前用户的权限:
use admin;
db.getUser("your_username")
将 your_username 替换为你的用户名,然后查看返回的结果,如果返回的结果中没有你需要的权限,可以使用以下命令为用户分配权限:
use admin;
db.grantRolesToUser("your_username", ["readWrite", "userAdminAnyDatabase"])
将 your_username 替换为你的用户名,["readWrite", "userAdminAnyDatabase"] 为你需要的权限列表,如果你需要用户具有读写和管理员任何数据库的权限,可以将权限列表设置为 ["readWrite", "userAdminAnyDatabase"]。
3、检查 PHP 代码中的连接字符串是否正确,一个典型的连接字符串如下:
$connectionString = "mongodb://your_username:your_password@localhost:27017/your_database?authSource=admin&compressors=disabled";
将 your_username、your_password、your_database 分别替换为你的用户名、密码和数据库名称,确保 authSource 字段指向了正确的数据库,通常是 admin,如果你不需要启用压缩功能,可以将 compressors=disabled 从连接字符串中删除。
4、确保 PHP 进程的用户具有足够的权限访问 MongoDB 服务端,你可以使用以下命令查看当前用户的所属组:
groups your_username
将 your_username 替换为你的用户名,然后查看返回的结果,如果返回的结果中没有 MongoDB 或者 MongoDB Service Agent Group(通常包含 mongodb, mongodb-server, mongodb-monitor, mongodb-auditlog, mongodb-security, mongodb-backup, mongodb-tools, mongodb-init 这些组),你需要将该用户添加到这些组之一,你可以使用以下命令将用户添加到 MongoDB Service Agent Group:
sudo usermod -aG 'mongodb' your_username
将 your_username 替换为你的用户名,完成以上步骤后,PHP 应该可以正常连接到 MongoDB 并进行操作了。