Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vue inter base et droits d'accés

2 réponses
Avatar
Sebastien
Bonjour,

J'ai besoin de créer dans une base "base1" , une vue vers une table
"matable" d'une autre base "base2".
Mais pour qu'un utilisateur puisse accéder aux données de table1 par
l'intermédiaire de la vue, il faut non seulement que l'utilisateur existe
dans les 2 bases (ça ok, je peux comprendre), mais aussi qu'il ait les
droits sur la table table1, ce que je trouve totalement illogique.
Ce comportement n'apparait pas lorsque la vue s'effectue sur une table de la
même base.

Est-ce que quelqu'un peut me fournir une explication ou une solution pour ne
pas avoir à mettre 2 fois les droits sur la table et sur la vue ?

Merci d'avance
Sébastien

Exemple pour reproduire le problème

/* depuis une connexion sa */
use base2
go
create table matable(col1 as integer)
go
use base1
go
create view mavue1 as select * from base2.dbo.matable
grant select on mavue1 to toto
go
use base2
go
create view mavue2 as select * from dbo.matable
grant select on mavue2 to toto
go

/* depuis une connexion toto autorisee dans les 2 bases base1 et base2 */
select * from base1..mavue1 /* ==> ne fontionne pas car droit d'accés refusé
sur matable */
select * from base2..mavue2 /* ==> fontionne */

2 réponses

Avatar
Fabian SIRACH [MS]
Bonjour,

Pouvez-vous regarder si l'option "Cross Database Ownership" correspond à
votre besoin et si oui, il est requis de l'activer au niveau de l'instance
SQL Server (Requiert le SP3a de SQL 2000) via Enterprise Manager ou
sp_dboption.
Plus d'informations dans l'aide en ligne SQL Server, rubriques "Using
Ownership Chains" et "Cross DB Ownership Chaining". Merci également de bien
valider les contraintes de sécurité que cette option pose.

Cordialement

Fabian


"Sebastien" wrote in message
news:%
Bonjour,

J'ai besoin de créer dans une base "base1" , une vue vers une table
"matable" d'une autre base "base2".
Mais pour qu'un utilisateur puisse accéder aux données de table1 par
l'intermédiaire de la vue, il faut non seulement que l'utilisateur existe
dans les 2 bases (ça ok, je peux comprendre), mais aussi qu'il ait les
droits sur la table table1, ce que je trouve totalement illogique.
Ce comportement n'apparait pas lorsque la vue s'effectue sur une table de
la
même base.

Est-ce que quelqu'un peut me fournir une explication ou une solution pour
ne
pas avoir à mettre 2 fois les droits sur la table et sur la vue ?

Merci d'avance
Sébastien

Exemple pour reproduire le problème

/* depuis une connexion sa */
use base2
go
create table matable(col1 as integer)
go
use base1
go
create view mavue1 as select * from base2.dbo.matable
grant select on mavue1 to toto
go
use base2
go
create view mavue2 as select * from dbo.matable
grant select on mavue2 to toto
go

/* depuis une connexion toto autorisee dans les 2 bases base1 et base2 */
select * from base1..mavue1 /* ==> ne fontionne pas car droit d'accés
refusé
sur matable */
select * from base2..mavue2 /* ==> fontionne */




Avatar
Sebastien
Merci beaucoup.
Faut que je teste, mais d'après la description de cette option, ça semble
correspondre à mon problème.

Sinon une remarque un peu hors-sujet : le logiciel de traduction en français
dans la base de connaissance sur support.microsoft.com, vous en êtes
vraiment satisfait ??? Car je trouve que par moment ... en fait souvent ...
c'est vraiment du n'importe quoi :-(

Cordialement.
Sébastien

"Fabian SIRACH [MS]" a écrit dans le message
de news:%
Bonjour,

Pouvez-vous regarder si l'option "Cross Database Ownership" correspond à
votre besoin et si oui, il est requis de l'activer au niveau de l'instance
SQL Server (Requiert le SP3a de SQL 2000) via Enterprise Manager ou
sp_dboption.
Plus d'informations dans l'aide en ligne SQL Server, rubriques "Using
Ownership Chains" et "Cross DB Ownership Chaining". Merci également de


bien
valider les contraintes de sécurité que cette option pose.

Cordialement

Fabian


"Sebastien" wrote in message
news:%
> Bonjour,
>
> J'ai besoin de créer dans une base "base1" , une vue vers une table
> "matable" d'une autre base "base2".
> Mais pour qu'un utilisateur puisse accéder aux données de table1 par
> l'intermédiaire de la vue, il faut non seulement que l'utilisateur


existe
> dans les 2 bases (ça ok, je peux comprendre), mais aussi qu'il ait les
> droits sur la table table1, ce que je trouve totalement illogique.
> Ce comportement n'apparait pas lorsque la vue s'effectue sur une table


de
> la
> même base.
>
> Est-ce que quelqu'un peut me fournir une explication ou une solution


pour
> ne
> pas avoir à mettre 2 fois les droits sur la table et sur la vue ?
>
> Merci d'avance
> Sébastien
>
> Exemple pour reproduire le problème
>
> /* depuis une connexion sa */
> use base2
> go
> create table matable(col1 as integer)
> go
> use base1
> go
> create view mavue1 as select * from base2.dbo.matable
> grant select on mavue1 to toto
> go
> use base2
> go
> create view mavue2 as select * from dbo.matable
> grant select on mavue2 to toto
> go
>
> /* depuis une connexion toto autorisee dans les 2 bases base1 et base2


*/
> select * from base1..mavue1 /* ==> ne fontionne pas car droit d'accés
> refusé
> sur matable */
> select * from base2..mavue2 /* ==> fontionne */