sql >> Databasteknik >  >> RDS >> Access

Ställa in databasåtkomstbehörigheter

Serversäkerhet beror främst på hur korrekt du kan konfigurera åtkomstbehörigheter för objekt. Att ge en användare överdrivna behörigheter kan orsaka många problem. Nej, en användare kommer inte att använda dina fel. Istället kommer någon hackare eller jag att göra detta. I det här fallet kan du glömma dina tabeller med data eller hela databasen.

Av någon anledning är säkerheten i databasen skydd från utsidan, till exempel en hackare. Detta händer dock mycket sällan. Jag är programmerare i ett stort företag och en administratör tänker inte ens på att skydda serverportarna, där allt är öppet. Det finns ett gäng databaser, program och till och med en FTP-server på en enda server och den har aldrig blivit hackad under de senaste 5 åren. Lyckligtvis övertalade jag administratören att distribuera WEB-servern på en separat hårdvara. Annars, om någon kände till IP-adressen för vår huvudserver, skulle vilken slacker som helst kunna hacka den. Varken databasen eller Windows har korrigerats på flera år.

Däremot uppstår interna problem varje dag på grund av en felaktig säkerhetspolicy. Alla användare loggar in med administratörsrättigheter och kan skapa vad de vill. Detta är ett verkligt problem eftersom de överdrivna behörigheterna tillåter slackers att visa sin fullständiga analfabetism. Därför kommer vi att överväga säkerhet oavsett var hotet kommer ifrån – från en hackare eller från en användare.

I den här artikeln kommer vi att överväga alla nödvändiga grunder för säkerhetsskydd från både hackare och användare. Jag valde MS SQL Server som exempel eftersom den innehåller allt som finns tillgängligt i andra databaser (Oracle, MySQL, etc.) och har ytterligare säkerhetshanteringsmöjligheter. Någon kanske tror att detta gör MS brantare. Men ibland kan ytterligare funktioner vara överdrivna och orsaka problem.

Serverroller

I Windows och andra operativsystem finns det grupper och användare för att hantera behörigheter. Vi kan kombinera användare till en grupp och ge rättigheter till dem alla på en gång, vilket är mycket enklare än att tilldela rättigheter till varje användare individuellt. För dessa ändamål, i databaser, finns begreppet "roll".

Antag att 100 användare ska ha behörighet att läsa data från en specifik tabell. Att ge varje användare denna behörighet är ett besvär. Det är mycket enklare att skapa en roll som är tillåten att läsa och sedan lägga till alla nödvändiga användare till den. Resultatet liknar gruppering.

I SQL Server finns det två typer av roller:server och databas. Serverroller är fördefinierade och kan inte ändras.

Öppna säkerhets-/serverrollgrenen i Enterprise Manager så att du kan se en lista över tillgängliga roller i den högra delen av fönstret. Beskrivningen definierar vad användaren kan göra med motsvarande roll.

Serverroller i MS SQL Server och rollhanterarfönstret

För att lägga till en befintlig användare till en roll, dubbelklicka på rollraden. I fönstret som visas kan du lägga till användare i rollen eller ta bort dem. Fliken Behörighet beskriver i detalj vad varje användare kan göra.

Användare

För att hantera användare, öppna grenen Säkerhet/inloggningar i Enterprise Manager. I den högra delen ser du en lista över alla serveranvändare. Som standard ges åtkomst till domänadministratörer och inbyggda inloggningskonton som sa.

För att lägga till en ny användare, högerklicka var som helst i den tomma högra delen av fönstret och välj Ny inloggning i menyn som visas. Högst upp i fönstret väljer du ett användarnamn. Om du behöver välja en befintlig domän eller datoranvändare, klicka på knappen (...) till höger om inmatningsfältet så ser du användarens sökruta i domänen.

Lägga till en ny användare

Nedan kan du välja typ av autentisering – Windows eller SQL Server. Om du väljer Windows behöver du inte ange något lösenord eftersom servern hämtar det från systemet. Du kan dock växla mellan Bevilja åtkomst (tillåt åtkomst) eller Neka åtkomst (förbjud). I det senare fallet kommer användaren att registreras i databasen, men de kommer inte att kunna ansluta – det är förbjudet.

Om du väljer SQL Server-autentisering måste du ställa in ett lösenord eftersom det i detta fall kommer att lagras i systemtabellerna på databasservern. Observera att även om endast Windows-autentiseringen anges i serverinställningarna kan du skapa SQL-serverposter, men du kommer inte att kunna logga in i systemet med dessa poster.

På fliken Serverroller kan du ange vilken serverroll som ska tilldelas en användare. Därför kan du lägga till användare till de nödvändiga rollerna, även i skapandet.

Användaråtkomst till databaser

På fliken Databasåtkomst anger du vilka databaser användaren kan arbeta med. Här är fönstret uppdelat i två delar:i den övre halvan kan du välja den databas som åtkomsten är tillåten till och i bottenlistan kan du välja databasrollen. Den här rollen i databasen kommer att definiera användarbehörigheterna. Flera roller kan tilldelas en användare.

Skapa ett konto qq, som kommer att ha tillgång till Northwind-databasen. Detta är en standardtestdatabas som skapas när servern distribueras.

Spara ändringarna.

Öppna nu grenen Databaser/Northwind/Users och se listan över användare som har tillåtelse att komma åt den valda databasen. Observera att det finns qq-kontot här. Det finns inget konto i andra databaser eftersom åtkomst till dem för vår nya användare är förbjuden.

Databasroller

Varje databas kan ha sina egna roller, som definierar åtkomstbehörigheterna för objekt. Många administratörer gillar inte att bry sig om dessa behörigheter. Således installerar de den inbyggda standardpubliken, som tillåter nästan allt. Om det saknas behörigheter för den offentliga rollen, lägg helt enkelt till en användare till serverrollen Systemadministratör. I det här fallet blir databasen sårbar.

Varje användare bör förses med sina egna och nödvändiga behörigheter. Det som inte är tillåtet ska förbjudas. Roller som redan finns på servern får inte användas eftersom deras behörigheter är öppna för alla. Det rekommenderas att till och med ta bort dem alla, särskilt den offentliga.

Skapa en roll

För att skapa en ny databasroll högerklickar du på grenen Databaser/Databasnamn/Roller. I menyn som visas väljer du Ny databasroll. Fönstret Databasrollegenskaper – ny roll öppnas. I den övre delen av fönstret skriver du rollnamnet.

Vi vill till exempel skapa en roll för revisorer. För att göra detta, skriv Buh i fältet Namn.

Skapa en databasroll

Välj en rolltyp nedan, till exempel en standardtyp. I mitten av fönstret finns en lista över användare som kommer att läggas till rollen. Än så länge är listan tom. Men om vi klickar på Lägg till lägger vi till användare, till exempel, till qq-kontot som skapats tidigare. Det finns inget annat att göra när man skapar en roll. Spara ändringarna genom att klicka på OK.

Åtkomstbehörigheter

Nu ska vi se hur vi kan ställa in behörigheter. Dubbelklicka på den skapade Buh-rollen för att öppna fönstret för redigering. Observera att knappen Behörighet är tillgänglig nu. Först när rollen är registrerad i databasen kan vi ändra dess rättigheter. Klicka på den här knappen för att öppna fönstret Databasrollegenskaper.

Ange åtkomstbehörigheter för roller

Överst i fönstret finns en lista med databasroller så att du snabbt kan växla mellan dem. Nu är Buh-rollen vald. I mitten av fönstret finns ett stort rutnät med följande kolumner:

  • Objekt – namn på objekt;
  • Ägare – en ägare till ett objekt;
  • SELECT – behörighet att visa data eller köra SELECT-satsen. Den är endast tillgänglig för tabeller och vyer;
  • INSERT – behörighet att lägga till data eller köra INSERT-satsen. Den är endast tillgänglig för tabeller och vyer;
  • UPDATE – behörighet att ändra data eller köra UPDATE-satsen. Den är endast tillgänglig för tabeller och vyer;
  • DELETE-behörighet för att radera data eller köra DELETE-satsen. Den är endast tillgänglig för tabeller och vyer;
  • EXEC – behörighet att köra lagrade procedurer och funktioner. Den är endast tillgänglig för lagrade procedurer och funktioner;
  • DRI (deklarativ referensintegritet). Den är endast tillgänglig för tabeller, vyer och funktioner.

Det finns inga behörigheter för den nya rollen. För att kunna se en tabell, till exempel kategorier, markera rutan i skärningspunkten mellan raden Kategorier och kolumnen VÄLJ. Du kommer att se en grön bock i rutan, vilket betyder en tillåtelse. Det andra klicket ändrar bocken till det röda krysset och betyder förbud. Detta kan vara nödvändigt om du ger en behörighet till användaren och lägger till denne i en annan roll, där åtkomst till den valda åtgärden är tillåten. Det tredje klicket tar bort alla behörigheter för åtgärden och lämnar rutan tom. Det betyder att det inte finns någon tillgång; det kan dock delegeras om användaren läggs till en annan roll med behörigheterna för objektet eller om behörigheter är explicit specificerade.

Om du väljer en rad med objektet i tabellen eller vyn, blir knappen Kolumner tillgänglig längst ned i fönstret. Antag att du valde tabellen och klickade på den här knappen. Fönstret öppnas där du kan ställa in behörigheter för enskilda tabellkolumner.

Ange kolumnbehörigheter

Detta är verkligen en stor möjlighet eftersom vissa kolumner som ansvarar för databasens integritet inte får ändras av användare eller hackare. Det är bättre att förbjuda UPDATE- eller SELECT-operationerna (om möjligt) för dessa kolumner.

Individualism

Roller är bekväma att använda när det är nödvändigt att kombinera liknande användare. Till exempel behöver många revisorer få tillgång till finansiella tabeller. Att ge tillstånd till varje revisor är tidskrävande. Det är mycket lättare att skapa en roll för revisorn, ge behörigheter till den och sedan lägga till alla redovisningskonton till den här rollen.

Det finns dock fall då behörigheter bör vara unika för en användare, eller utöver de behörigheter som ges av rollen, är det nödvändigt att ge ytterligare behörigheter. Till exempel behöver en av revisorerna ha tillgång till tabeller för personalavdelningen. I det här fallet är det bättre att lägga till behörigheter direkt till revisorn istället för att skapa en ny roll.

Vi utforskade rollerna först för att vänja oss vid dem. I de flesta fall finns det ett separat konto för revisorer, ett separat konto för ekonomer etc. I det här fallet ansluter de flesta till servern med ett konto. Alltså att kontrollera vem som gör vad är omöjligt. Det är bättre att använda individuella behörigheter där det behövs, medan varje användare måste ha sitt eget konto.

Behörigheter för tabeller

Låt oss se hur vi kan ge behörigheter för särskilda objekt, till exempel på tabeller.

Välj grenen Databaser/Northwind/Tables i objektträdet. I den högra delen öppnas en lista över alla tabeller. Högerklicka på valfri tabell och välj Alla uppgifter/Hantera behörigheter. Fönstret Behörighetsegenskaper öppnas, vilket liknar fönstret Databasrollegenskaper med listan över användare istället för listan med objekt. Objektet är en tabell som vi klickade på och dess namn kommer att listas i rullgardinsmenyn i fönstret. Nu måste vi ställa in behörigheter för detta objekt för olika användare.

Ange behörigheter för ett bord

Listan över behörigheter är som följer:visa, uppdatera, lägg till, ta bort, kör och hantera. Om du klickar på knappen Kolumner öppnas fönstret för att ställa in behörigheter för objektet på nivå med tabellfält för en viss användare.

Visningar

Vi har två bord. En av dem lagrar listan över anställda, medan en annan tabell innehåller information om antalet arbetade timmar per månad och erhållna löner (tjänstemän och dolda löner).

Antag att en skattetjänsteman kommer till dig och ber att få visa arbetarnas löner. Dessutom frågar de om du har betalat alla skatter. Vilka åtgärder behöver du utföra på din sida?

Det första förslaget kom från tredje raden – att skapa en ny användare som får läsa tabeller inklusive en lista över anställda och löner. Dessutom bör du inte glömma att stänga kolumnen med den dolda lönen. Faktiskt är lösningen korrekt men absolut ineffektiv.

Det bästa alternativet är att skapa en vy, en SQL-fråga som väljer data. I databasen ser det ut som en tabell. Du kan välja SQL-data med hjälp av frågor och bevilja behörigheter. Det visar sig att frågan kommer att köras mot frågan.

För att skapa en vy, kör följande fråga:

CREATE VIEW salary AS
SELECT fields for a tax official
FROM Employees, Wages
WHERE joins

Nu finns det ett nytt löneobjekt i grenen Databaser/Northwind/Views. Om du högerklickar på den och väljer Alla uppgifter/Hantera behörigheter öppnas fönstret för att bevilja behörigheter. Ange ett tillstånd för skattetjänstemannen och spara det. För att granska innehållet i vyn, kör frågan:

SELECT *
FROM salary

Som du kan se finns det tillgång till ett enkelt bord. Skattetjänstemannen kommer också att tro att de ser faktiska uppgifter. Men i själva verket kommer denna fråga bara att innehålla de data vi behöver.

I verkliga livet kan skattetjänstemannen inte luras så lätt eftersom de inte är dårar. Detta exempel visar dock att vyn kan vara en perfekt säkerhetsmetod. Vi kan visa den data användare behöver och inget annat. Samtidigt har vi alla verktyg för att hantera behörigheter på vyn utan att påverka åtkomstbehörigheterna på tabellerna.

Således kan olika vyer av samma tabeller visa olika data. Om du vill visa ytterligare en kolumn lägger du till vyerna i frågan. I det här fallet finns det inget behov av att ändra behörigheter.

Systemvyer

I varje databas kan det finnas systemvyer som skapas av servern automatiskt. Jag rekommenderar inte att ge dem tillstånd eftersom de kan visa ytterligare information, vilket kan hjälpa en hackare att ställa in behörigheter eller helt enkelt förstöra data. Systemvyerna börjar med sys-prefixet och System anges i kolumnen Typ i listan.

Procedurer och funktioner

Moderna databasservrar stödjer lagrade procedurer och funktioner. Detta är en PL/SQL- eller Transact-SQL-kod beroende på vilken databas som körs på databasservern. Genom att använda dessa procedurer kan vi utföra alla operationer på servern eller helt enkelt välja data, som i vyn. Vi kan ställa in behörigheter för varje procedur.

När vi granskar roller har vi redan sett procedurerna i listan över objekt som du kan ställa in behörigheter för och endast EXEC-kolumnen är tillgänglig i dessa rader eftersom procedurerna endast kan köras.

Lagrade procedurer och funktioner lagras i en viss databas. För att se procedurer för Northwind-databasen, välj grenen Databases/Northwind/Stored Procedures. Det finns många systemprocedurer, vars namn börjar med prefixet dt_ och System anges i kolumnen Typ. Det rekommenderas att inte bevilja tillgång till dessa procedurer, om möjligt. Du kan se funktioner i grenen Databaser/Northwind/Användardefinierad funktion.

För att ändra behörigheter för procedurer och funktioner, högerklicka på dess namn och välj Alla uppgifter/Hantera behörigheter i menyn. I fönstret som visas kan du bara ändra EXEC-kolumnen för procedurer och EXEC- och DRI-kolumnerna för funktioner.

Behörighetspolicy

Vissa administratörer ställer in behörigheter baserat på den befintliga rollen, till exempel offentlig. Detta är inte sant eftersom det i den här rollen kan finnas behörigheter som användare inte behöver. Försök därför att ange en helt ny behörighet.

När det gäller mig skapar jag alltid en ny roll och ger ett minimum av behörigheter. Om användare ber om fler behörigheter och de faktiskt är nödvändiga, lägger jag till fler behörigheter. Om du tillåter allt som standard finns det ingen garanti för att onödiga och farliga rättigheter i framtiden kommer att raderas.

Ett annat problem att ställa in färre behörigheter är en vana. Användare kan vänja sig vid att många tillstånd ges till dem och då kommer förbudet att orsaka en allvarlig skandal. Ingen gillar när deras rättigheter kränks.

Tabell/databaser

Databaser lagrar sina inställningar och dolda egenskaper i systemtabeller och databaser. De skiljer sig inte från andra databasobjekt och behörigheter kan ställas in för dem. Tillåt inte i något fall användare att komma åt dessa tabeller utan ett speciellt behov.

I SQL Server lagras viktig systemdata i master- och msdb-databaserna. Därför ska dessa databaser skyddas. I Oracle finns varje databas som ett separat objekt och systemtabeller lagras tillsammans med användarnas.

Nästan alla databasservrar erbjuder att installera testdatabaser som kan användas för att lära sig eller testa systemet. Om du har dem, ta bort – eftersom en offentlig åtkomst är inställd på dessa databaser. Om en hacker känner till namn eller egenskaper för något befintligt objekt i systemet, kommer det att förenkla deras uppgift avsevärt.

När du ansluter till en testdatabas kan du utföra vissa kommandon på servern och skada operativsystemet eller en fungerande databas. Inga ytterligare saker ska finnas i systemet. Dessutom har sådana tabeller/databaser ganska höga behörigheter även för en gäst.

Sammanfattning

Trots att vi använde MS SQL Server som exempel, finns begreppen behörigheter, roller och autentisering i alla databaser.

När du känner till alla regler vi övervägde, är det enda du behöver att utforska det speciella med deras användning i din databas.


  1. Konvertera "datetimeoffset" till "smalldatetime" i SQL Server (T-SQL-exempel)

  2. java.lang.UnsatisfiedLinkError:ingen ocijdbc11 i java. bibliotek.sökväg

  3. Hur returnerar man en resultatuppsättning/markör från ett anonymt Oracle PL/SQL-block som kör Dynamic SQL?

  4. SQLite CROSS JOIN med ett praktiskt exempel