2009-11-04 13 views
0

dans quel logiciel de base de données/langue est-il possible de créer une base de données accessible par plusieurs utilisateurs sauf ses deux colonnes être accessible uniquement par l'utilisateur admin. veuillez donner des détails sur la façon dont cette base de données peut être créée.dans quelle base de données logiciel/langue pouvons-nous avoir une base de données accessible par plusieurs utilisateurs sauf ses deux colonnes accessibles uniquement par administrateur

+1

Ne vaudrait-il pas mieux créer une vue? – MSalters

+0

un client veut que j'utilise sa base de données mais il ne veut pas que j'accède à deux colonnes dans un tableau – silverkid

+0

que voulez-vous dire par créer une vue? – silverkid

Répondre

1

Voici un exemple (d'Oracle) d'utilisation d'une vue pour contrôler l'accès pour protéger l'accès à certaines colonnes d'une base de données. Notez que nous pouvons restreindre les colonnes qui peuvent être mises à jour.

SQL> conn apc/apc 
Connected. 
SQL> desc emp 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
EMPNO          NOT NULL NUMBER(4) 
ENAME          NOT NULL VARCHAR2(10) 
JOB            VARCHAR2(9) 
MGR            NUMBER(4) 
HIREDATE           DATE 
SAL            NUMBER(7,2) 
COMM            NUMBER(7,2) 
DEPTNO            NUMBER(2) 

SQL> create or replace view v_emp as 
    2 select empno, ename, job, mgr, hiredate, deptno from emp 
    3/

View created. 

SQL> grant select, insert, update (job, mgr, deptno) on v_emp to a 
    2/

Grant succeeded. 

SQL> conn a/a 
Connected. 
SQL> create synonym emp for apc.v_emp 
    2/

Synonym created. 

SQL> select * from emp where deptno = 10 
    2/

    EMPNO ENAME  JOB    MGR HIREDATE  DEPTNO 
---------- ---------- --------- ---------- --------- ---------- 
     7782 BOEHMER MANAGER   7839 09-JUN-81   10 
     7839 SCHNEIDER PRESIDENT   17-NOV-81   10 
     7934 KISHORE CLERK   7782 23-JAN-82   10 

SQL> update emp set deptno = 40 where empno = 7934 
    2/

1 row updated. 

SQL> insert into emp values (8000, 'APC', 'DOGSBODY', 7934, sysdate, 40) 
    2/

1 row created. 

SQL> update emp set hiredate = sysdate-720 where empno = 7934 
    2/
update emp set hiredate = sysdate-720 where empno = 7934 
     * 
ERROR at line 1: 
ORA-01031: insufficient privileges 


SQL> delete from emp where empno = 7934 
    2/
delete from emp where empno = 7934 
      * 
ERROR at line 1: 
ORA-01031: insufficient privileges 


SQL> 

Ceci est un exemple relativement simple car la vue est un à un avec la table et les colonnes sont facultatives .; blindés Si les colonnes blindées avaient été définies comme NOT NULL alors j'aurais besoin d'un trigger INSTEAD OF par défaut ou dériver des valeurs sur INSERT (ou je devrais annuler le privilège INSERT).

0

Dans la plupart des SGBD (Oracle, Mysql, SQL server ...), vous pouvez accorder aux utilisateurs l'accès à n'importe quelle colonne ou révoquer n'importe quelle permission.

+0

Les privilèges de colonne ne peuvent pas être accordés directement dans Oracle. VPD est utilisé à la place, ou des vues. –

+0

Picky, mais vous pouvez accorder le niveau de la colonne INSERT et UPDATE en utilisant subvention mise à jour ([colonne], [colonne] ...) sur [table] à [utilisateur]; Mais cela ne couvre pas select. –

1

Oracle peut le faire en utilisant des vues, mais la manière la plus «correcte» serait d'utiliser la base de données virtuelle virtuelle avec un comportement de masquage des colonnes, dans lequel les colonnes sensibles apparaissent comme nulles aux utilisateurs non privilégiés.

+0

La fonctionnalité VPD nécessite la licence Enterprise Edition. En outre, bien que la sécurité au niveau de la ligne ait été introduite en 8.1.7.4, la sécurité de niveau de colonne équivalente était nouvelle pour 10gR2. – APC