Aplikační role Helios Orange

PříspěvekNapsal: 30.03.2007 08:48
od jan.havranek
Uživatelé HELIOS Orange přidaní do databáze prostřednictvím programu mají standardně (by design) na MS SQL Serveru práva role db_owner. Toto může být vnímáno jako bezpečnostní riziko. Řešením je použití tzv. Aplikační role.

Aplikační role slouží k zamezení přístupu k databázi jinými prostředky než pomocí aplikace Helios Orange.
Finta spočívá v tom, že uživatel má v databázi pouze roli Public (tudíž se k ní nedostane nástroji SQL).
Uživatel se přihlašuje nadále svým jménem a má nastavena vlastní práva na přehledy a akce, Helios však přistupuje k databázi pomocí aplikační role.

Podmínky provozu aplikační role:
  • Role sysadmin (sa, BUILTIN\Administrators apod.) se nikdy nepřihlašuje přes aplikační roli, tzn. vždy má plná práva a přístup.
  • Nastavení Role a přiřazení Role do Heliosu musí provést sysadmin.
  • Pokud je nastaven přístup přes aplikační roli, nelze se v rámci Heliosu přepínat mezi firmami.
  • Každá databáze má svůj svébytný přístup, jako by to byla samostatná instalace a pro každou firmu musí existovat specifický zástupce Helios Orange
  • Na SQL od verze 2005 a vyšších je třeba aby heslo aplikační role splňovalo bezpečnostní politiky domény, obvykle tedy musí mít 6 a více znaků a musí obsahovat čísla písmena a speciální znaky.
  • Heslo nesmí obsahovat národní znaky (diakritika).
  • Role v různých databázích může mít stejné jméno i heslo.
  • V okamžiku použití aplikační role mají právo do Heliosu všichni, kdo jsou minimálně Public (vidím je v seznamu uživatelů, ale nejsou zařazeni do databáze).

Jak vytvořit a použít aplikační roli:
1/Nejprve skriptem na SQL Server založit v potřebných databázich aplikační roli a nastavit jí práva vlastníka (db_owner).
Tento skript použít postupně na všech databázích Heliosu.
Kód: Vybrat vše
USE [JménoDatabáze]
CREATE APPLICATION ROLE [JménoRole] WITH DEFAULT_SCHEMA=[dbo], PASSWORD='SilnéHeslo'
GO
EXEC [JménoDatabáze]..sp_addrolemember 'db_owner', 'JménoRole'
GO


2/Pro každou databázi musí být vytvořen zvláštní zástupce Heliosu, do Cíle se na konci uvede řádkovým parametrem -D jméno otevírané databáze a parametr -F0.
např.:
Kód: Vybrat vše
zástupce 1. Cíl: "\\Server\Helios IQ\Helios.EXE" -DHelios001 -F0
zástupce 2. Cíl: "\\Server\Helios IQ\Helios.EXE" -DHelios002 -F0
zástupce 3. Cíl: "\\Server\Helios IQ\Helios.EXE" -DHelios003 -F0

apod.

3/Pomocí zástupce spustit postupně Helios do každé databáze (jako sysadmin).
Pokud se objeví dialog změny tabulek (TabSetup, TabDBHelios, TabUserCfg) tak potvrdit.
Přidat a zase odebrat uživatele do a z databáze.
V menu Možnosti - Konfigurace/Správa systému - přehled Systémové konstanty - Oprava na databázi, kde chci použít aplikační roli - záložka Aplikační role, vybrat roli a zadat heslo role.

=============================

Další užitečné skripty pro práci s aplikační rolí.

Odebrání práv aplikační roli:
Kód: Vybrat vše
EXEC [JménoDatabáze]..sp_droprolemember 'db_owner', 'JménoRole'


Dodatečná změna hesla pro aplikační roli (Pozor!!! je třeba upravit heslo i v Heliosu):
Kód: Vybrat vše
EXEC [JménoDatabáze]..sp_approlepassword 'JménoRole','NovéSilnéHeslo'


Smazání aplikační role v databázi:
Kód: Vybrat vše
EXEC [JménoDatabáze]..sp_dropapprole 'JménoRole'

Aplikační role - chyba při Update

PříspěvekNapsal: 30.07.2009 07:33
od jan.havranek
Na SQL2005 a vyšším nemá aplikační role oprávnění spustit Kontrolu konzistence databáze, myšleno databázovou kontrolu integrity pomocí příkazu DBCC CHECKDB, resp. DBCC CHECKCATALOG (na starších verzích SQL to šlo). To se projeví chybovou hláškou pokud při spuštění změnových skriptů po Update nechám zaškrtnuto Před provedením změn zkontrolovat konzistenci databáze.

aprole_update.gif
Chyba při spuštění kontroly konzistence
aprole_update.gif (7.58 KiB) Zobrazeno 13089 krát

Tato chyba se projeví jen běžným uživatelům, administrátor SQL problém nemá. Pokud má update provádět i běžný uživatel, musí políčko kontroly odškrtnout.

Odebrání všech práv na databázové objekty

PříspěvekNapsal: 18.06.2012 09:06
od jiri.dolezal
Odebráním uživatele z role db_owner mu odebereme práva na většinu databázových objektů (zejm. tabulek). Uživatel však může mít explicitně přidělena práva mimo roli db_owner (většinou tabulky TabUserCfg, TabSetup, TabDBHelios).

Role public (v jejímž kontextu přistupují k databází uživatelé po odebrání z role db_owner) má rovněž aplikací přidělenu celou řadu práv na objekty typu Uložená procedura a View.

Výše zmíněné může být vnímáno jako nežádoucí z hlediska zabezpečení (důvod pro užití Aplikační role).

Pro odebrání veškerých práv (uživateli / roli) na databázové objekty uživatelského typu, vyjma těch které jsou pro chod aplikace bezpodminečně nutné (právo EXECUTE pro uloženou proceduru dbo.hp_StartIQ) lze použít následující skript:

Kód: Vybrat vše
-- * Odeber všechna práva na user objekty v DB

SET NOCOUNT ON;

DECLARE @ExecSQL NVARCHAR(4000);
DECLARE @Grantee NVARCHAR(128);
DECLARE @Object NVARCHAR(128);
DECLARE @Action NVARCHAR(128);

SET @Grantee = 'public';  -- změnit dle potřeb / NT_USERS bez hranatých závorek

-- naplníme tabulku s objekty
IF OBJECT_ID('tempdb..#TempPrava') IS NOT NULL
   DROP TABLE #TempPrava;
CREATE TABLE [#TempPrava](
     [Owner] sysname NULL
    ,[Object] sysname NULL
    ,[Grantee] sysname NULL
    ,[Grantor] sysname NULL
    ,[ProtectType] [nvarchar](10) NULL
    ,[Action] [nvarchar](60) NULL
    ,[Column] sysname NULL
    );

INSERT INTO #TempPrava
EXEC sp_helprotect @username = @Grantee;

-- smažeme vše co není dbo + povinné objekty
DELETE FROM #TempPrava
WHERE [Owner] <> N'dbo'
   OR [Object] IN (N'hp_StartIQ');

SET @Grantee = QUOTENAME(@Grantee);

DECLARE CurRev CURSOR LOCAL FAST_FORWARD FOR
   SELECT
      [Object]
      ,[Action]
   FROM #TempPrava
   WHERE ProtectType = N'Grant';
OPEN CurRev;
FETCH NEXT FROM CurRev INTO @Object, @Action;
   WHILE (@@FETCH_STATUS = 0) AND (@@ERROR = 0)
   BEGIN
      -- zacatek akce v kurzoru CurRev
      
      SET @ExecSQL = N'REVOKE ' + @Action + ' ON dbo.' + @Object + ' FROM ' + @Grantee;
      EXEC sp_executesql @ExecSQL;
      
      -- konec akce v kurzoru CurRev
   FETCH NEXT FROM CurRev INTO  @Object, @Action;
   END;
CLOSE CurRev;
DEALLOCATE CurRev;


Upozornění!
Nelze vyloučit, že v průběhu následujícího provozu, zejm. v rámci aktualizací programu, aplikace znovu stanoví práva na některé objekty pro roli public.

Aplikační role - nemožnost změny hesla

PříspěvekNapsal: 01.11.2017 15:23
od jiri.dolezal
Je-li používána aplikační role pro spouštění HELIOSu a uživatel není členem sysadmin role na SQL serveru, pak snaha o změnu hesla v HELIOS skončí chybou:

Kód: Vybrat vše
[SQL:15007,16] '{login}' is not a valid login or you do not have permission.


Toto je důsledek použití aplikační role a změna hesla touto cestou není možná.