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
Répondre
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).
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.
Les privilèges de colonne ne peuvent pas être accordés directement dans Oracle. VPD est utilisé à la place, ou des vues. –
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. –
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.
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
Ne vaudrait-il pas mieux créer une vue? – MSalters
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
que voulez-vous dire par créer une vue? – silverkid