PHP MongoDB認證實現
在開發過程中,會遇到需要對MongoDB進行認證的情況,本文通過舉例來介紹PHP中的MongoDB認證實現。
在MongoDB中,用戶的信息保存在系統Databases的user集合中,管理員賬戶默認是admin,其他用戶可以在授權之后被創建。我們想要實現認證,必須指定連接到MongoDB的用戶名和密碼。
<?php
$dbhost = 'localhost:27017';
$dbname = 'test';
$username = 'testUser';
$password = 'testPass';
$mongoClient = new MongoClient("mongodb://${username}:${password}@${dbhost}/${dbname}");
?>
在連接字符串中,需要指定用戶名和密碼。如果用戶名和密碼不匹配,則連接將被拒絕。如果成功驗證了用戶,則可以像平常一樣執行插入,查找,更新和刪除等操作。
需要注意的是,如果MongoDB中的用戶不具有某些權限,那么將無法執行對應的操作。例如,如果想要在指定的數據庫中創建一個新的集合,需要確保該用戶具有該數據庫中的創建集合權限。
如果我們在連接的時候不想將密碼明文寫在代碼中,可以使用以下方式實現:
<?php
$dbhost = 'localhost:27017';
$dbname = 'test';
$username = 'testUser';
$password = 'testPass';
$mongoClient = new MongoClient("mongodb://${username}:${password}@${dbhost}/${dbname}"
, array("username" => "{$username}", "password" => "{$password}"));
?>
這樣,就不需要明文輸入密碼了。
另外,為了安全起見,我們還可以對連接進行加密。例如:
<?php
$dbhost = 'localhost:27017';
$dbname = 'test';
$username = 'testUser';
$password = 'testPass';
$mongoClient = new MongoClient("mongodb://${username}:${password}@${dbhost}/${dbname}",
array('ssl' => true, 'sslAllowInvalidCertificates' => true));
?>
在上面的示例中,我們添加了ssl選項。此選項啟用安全套接字層加密,將數據傳輸加密,使其更安全。sslAllowInvalidCertificates選項允許您使用不安全的SSL證書進行連接。
之前的示例中我們使用了MongoClient類和depracated的構造函數,如果您使用的是比5.6更高級別的PHP版本,則需要使用新的MongoDB驅動程序才能連接到MongoDB。
下面是使用MongoDB驅動程序實現連接的示例:
<?php
$dbhost = 'localhost:27017';
$dbname = 'test';
$username = 'testUser';
$password = 'testPass';
$mongoClient=new MongoDB\Client("mongodb+srv://${username}:${password}@${dbhost}/${dbname}",
array("password"=>$password, "username"=>$username));
?>
上面示例中,使用的是新的類MongoDB\Client,方法與使用MongoClient類相似,只是連接字符串不同。為了安全起見,密碼沒有明文傳遞,而是傳遞到options數組中。
結論
本文介紹了在PHP中實現MongoDB認證的幾種方式:
- 在連接字符串中指定用戶名和密碼。
- 使用MongoDB驅動程序進行連接。
- 為連接添加安全選項。
使用其中任意一種方式都能保證MongoDB的安全性。