accorder l'access en lecture sur une vue, mais pas sur ses tables sous-jacentes à partir d'autres bases de données

Je souhaite accorder des permissions de lecture à un user pour une vue qui joint deux tables d'une autre database. Je ne veux pas:

  1. donnez-lui la permission sur la database où les tables sont ou ajoutez-le en tant qu'user là.
  2. Faites-lui le propriétaire de la vue / schéma en raison des exploits de security.
  3. Je ne veux pas créer d'abord une table, ou des variantes d'une table de hachage avec une procédure truncate et une procédure stockée qui insère datatables sur un triggersur.

Cela peut-il être fait d'une manière ou d'une autre? Peut-être qu'il y a quelque chose que j'ai raté et que vous pourriez savoir.

J'ai lu ces messages mais ils n'ont pas résolu mon problème: Accorder l'autorisation SELECT sur une vue, mais pas sur les objects sous-jacents

Accorder une sélection sur une vue et non sur une table de base lorsque la table de base se trouve dans une database différente

https://msdn.microsoft.com/en-us/library/ms188676.aspx

https://dba.stackexchange.com/questions/89632/sql-server-grant-select-access-to-a-user-in-a-view-and-not-in-its-tables

Je vous remercie

Edit: La solution la plus simple que je suis venu, après quelques searchs, est l'activation de l'option de cross database ownership chaining sur la database où je place les vues et accorde l'autorisation de lecture aux users. Cela pourrait être en contraste avec mon deuxième point que j'essaie d'éviter. Est-ce une bonne idée?

Donnez-leur une connection à une autre database sur le même server et incluez seulement votre vue unique, avec la vue pointant vers votre database sécurisée. Ne lui donnez pas access à tout sauf à la database avec la vue, et ne lisez que l'access à cette seule vue. Évidemment, vous devrez qualifier complètement votre nom de table (par exemple, à from SourceDB.dbo.SomeSecretTable ).

Ce que j'ai fini par faire:

  1. Créez un groupe de directorys actif.
  2. Ajoutez des users au groupe AD.
  3. Créez une connection pour le groupe AD mappé pour le DB source et la database cible.
  4. Ajoutez l'user sur la database cible et lui donnez des permissions uniquement pour les vues demandées.
  5. (Facultatif) Ajout du groupe sur toutes les bases de données pour refuser select.

Impossible de find une solution pour ma question d'origine sans le groupe AD.