Správa uživatelů databáze je obzvláště důležitou součástí zabezpečení dat, protože musíme rozumět tomu, kdo k databázi přistupuje, a každému uživateli nastavit přístupová práva. Pokud databáze nemá řádnou správu uživatelů, přístup uživatelů bude v průběhu času velmi chaotický a obtížně se udržuje.
MongoDB je databáze NoSQL a úložiště dokumentů. Použití konceptu RBAC (Role Based-Access Control) je klíčem k implementaci správné správy uživatelů pro správu uživatelských pověření.
Co je Role Based Access Control (RBAC)?
RBAC je přístup, který omezuje systém pouze na autorizované uživatele. V organizaci se vytvářejí role pro různé pracovní funkce, v databázi pak vytváříme přístupová práva k provádění některých operací přiřazených konkrétní roli.
Zaměstnancům (nebo jiným uživatelům systému) jsou přiděleny určité role a jejich prostřednictvím jsou přiřazena oprávnění k provádění funkcí počítačového systému. Uživatelé nedostávají oprávnění přímo, ale získávají je pouze prostřednictvím své role (nebo rolí). Správa jednotlivých uživatelských práv se stává záležitostí pouhého umístění příslušné role do uživatelského účtu; to zjednodušuje obecné operace (jako je přidávání uživatelů nebo změna uživatelských oddělení).
Pro RBAC jsou nastavena tři hlavní pravidla:
- Přiřazení rolí :Subjekt může vykonávat oprávnění pouze v případě, že subjekt byl vybrán nebo mu byla přidělena role.
- Role autorizace :aktivní role subjektu musí být pro subjekt autorizována. S pravidlem 1 výše toto pravidlo zajišťuje, že uživatelé mohou převzít role pouze pro ty, kteří jsou oprávněni.
- Autorizace oprávnění :Subjekt může provádět povolení pouze v případě, že má oprávnění pro aktivní roli subjektu. S pravidly 1 a 2 toto pravidlo zajišťuje, že uživatelé mohou uplatňovat oprávnění pouze pro ty, kteří jsou oprávněni.
Tento blog stručně zkontroluje Role Based Access Control v databázi MongoDB.
Uživatelské role MongoDB
MongoDB má v databázi několik typů rolí, to jsou...
Vestavěné role
Poskytuje přístup k datům a akcím do MongoDB prostřednictvím autorizace na základě rolí a má vestavěné role, které poskytují několik úrovní přístupu k databázi.
Role uděluje několik oprávnění dělat něco se zdrojem, který byl vytvořen. Vestavěné role MongoDB mají několik kategorií:
- Databáze uživatelů :Role Uživatelé databáze mají roli při manipulaci s daty v nesystémové kolekci. Příklady rolí databáze uživatelů jsou:čtení, čteníZápis.
- Správa databáze :Role Database Administration se zabývá administrativní správou databází, jako je správa uživatelů, schéma a objekty v nich.
- Příklady rolí pro správu databáze jsou:dbAdmin, userAdmin, dbOwner.
- Správa clusteru :Úlohou administrace clusteru je administrovat celý systém MongoDB, včetně jeho replikasetů a shardů. Příklady rolí správy clusteru jsou:clusterAdmin, clusterManager.
- Zálohování a obnova :Tato role je specifická pro funkce související se zálohováním databáze v MongoDB. Příklady rolí jsou:zálohování, obnova.
- Veškeré databázové role :Role jsou ve správci databáze a mají přístup ke všem databázím kromě lokální a konfigurační. Příklady jsou:readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase.
- Superuživatel :Role má schopnost udělit přístup každému uživateli, každému oprávnění, ve všech databázích. Příklad této role:root
Uživatelsky definované role
Kromě vestavěných rolí si můžeme vytvářet vlastní role podle našich potřeb, jaká privilegia těmto rolím dáme. Chcete-li vytvořit role, můžete použít příkaz funkce db.createRole (). Kromě možnosti vytvářet role existuje několik dalších funkcí pro správu existujících rolí, jako jsou:db.dropRole () která je užitečná pro mazání existujících rolí v databázi, funkce db.getRole () pro získání všech informací z konkrétních rolí.
Akce oprávnění v MongoDB
Akce oprávnění v MongoDB jsou akce, které může provádět uživatel na zdroji. MongoDB má několik kategorií akcí, konkrétně:
- Akce správy databáze, akce související s příkazy souvisejícími se správou databáze, jako jsou akce changePassword, createCollection, createIndex.
- Akce dotazů a zápisu, akce související s prováděním manipulace s daty v kolekci. Například v akci insert je příkaz, který lze v této akci provést, příkaz insert, který lze vložit do dokumentů.
- Akce správy nasazení, akce související se změnami v konfiguraci databáze. Některé akce, které spadají do kategorie Deployment Management, jsou cpuProfiler, storageDetails, killOp.
- Akce replikace, akce související se spouštěním zdrojů replikace databáze, jako je replSetConfigure, replSetHeartbeat.
- Akce správy serveru, akce související s příkazy ze zdrojů správy serveru na mongoDB, jako jsou akce logrotate, které se používají k rotaci databází protokolů na úrovni operačního systému.
- Sharding Actions, akce související s příkazy z databází sharding databází, jako je addShard pro přidání nových uzlů fragmentu.
- Akce relace, akce související s relacemi zdrojů v databázi, jako je listSessions, killAnySession.
- Diagnostické akce, akce související s diagnostikou zdrojů, jako je dbStats ke zjištění nejnovějších podmínek v databázi.
- Bezplatné monitorovací akce, akce související s monitorováním v databázi.
Správa uživatelů a rolí MongoDB
Můžete vytvořit uživatele a poté mu přiřadit integrované role, například takto:
db.createUser( {
user: "admin",
pwd: "thisIspasswordforAdmin",
roles: [ { role: "root", db: "admin" } ]
} );
Ve skriptu výše, což znamená, že uživatel admin bude vytvořen s heslem, které bylo definováno pomocí vestavěných rolí root, kde je role zahrnuta v kategorii Superuser.
Kromě toho můžete uživateli přiřadit více rolí, zde je příklad:
db.createUser(
{user:'businessintelligence',
pwd:'BIpassw0rd',
roles:[{'role':'read', 'db':'oltp'}, { 'role':'readWrite', 'db':'olapdb'}]
});
Uživatelé Business Intelligence mají 2 role, první role čtení v databázi oltp a role readWrite v databázi olapdb.
Vytváření uživatelsky definovaných rolí lze použít příkaz db.createRole (). Musíte určit účel vytvoření role, abyste mohli určit, jaké akce budou v této roli probíhat. Následuje příklad vytvoření role pro monitorování databáze Mongodb:
use admin
db.createRole(
{
role: "RoleMonitoring",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
Poté můžeme uživateli, kterého vytvoříme, přiřadit uživatelsky definovanou roli, lze použít následující příkaz:
db.createUser( {
user: "monuser",
pwd: "thisIspasswordforMonitoring",
roles: [ { role: "RoleMonitoring", db: "admin" } ]
} );
Mezitím můžete k přiřazení role existujícímu uživateli použít následující příkaz:
db.grantRolesToUser(
"existingmonuser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Chcete-li zrušit existujícího uživatele role, můžete použít následující příkaz:
db.revokeRolesFromUser(
"oldmonguser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Pomocí uživatelsky definovaných rolí můžeme vytvářet role, jak si přejeme, podle akcí, které s těmito rolemi provedeme, například role pro omezení uživatelů mohou mazat pouze řádky v určitých databázích.
Závěr
Použití přístupových práv může zlepšit zabezpečení. Mapování rolí a uživatelů v databázi vám usnadňuje správu uživatelského přístupu.
Ujistěte se, že všechny tyto informace týkající se rolí a práv jsou řádně zdokumentovány s omezeným přístupem k dokumentu. To vám pomůže sdílet informace s jiným DBA nebo pracovníky podpory a je užitečné pro audity a odstraňování problémů.