web-dev-qa-db-fra.com

L'autorisation SELECT a été refusée sur l'objet 'Adresse', base de données 'CNET_85731', schéma 'dbo'

Je travaille depuis 7 mois sur un ASP.NET C # utilisant Visual Studio 2008 et SQL Server 2008.

Aujourd'hui, j'utilisais une partie de mon application qui fonctionnait auparavant et j'ai l'erreur suivante:

L'autorisation SELECT a été refusée sur l'objet "Adresse", la base de données "CNET_85731" et le schéma "dbo".

J'ai parcouru mon code et découvert que cette erreur était causée par le contrôle utilisateur suivant:

protected void sdsAddressesList_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
    if (e.AffectedRows == 0)
    {
        ddlAddresses.Items.Insert((0), new ListItem("No Billing Addresses", "0"));
    }
}

le SQLDataSource est défini comme suit:

<asp:SqlDataSource ID="sdsAddressesList" runat="server" OnSelecting="sdsAddressesList_Selecting" OnSelected="sdsAddressesList_Selected"
    SelectCommand="SELECT [AddressId], [ZipPostalCode], ZipPostalCode + '&nbsp;--&nbsp;' + Address1 AS CombinedAddress FROM [Address] WHERE ([CustomerID] = @CustomerID AND [IsBillingAddress] = @IsBillingAddress) ORDER BY [ZipPostalCode]"
    ConnectionString="<%$ ConnectionStrings:eCoSysConnection %>">
    <SelectParameters>
        <asp:Parameter Name="CustomerID" Type="Int32" />
        <asp:Parameter Name="IsBillingAddress" Type="Boolean" />
    </SelectParameters>
</asp:SqlDataSource>

Fondamentalement, le contrôle extrait une liste d'adresses pour l'utilisateur connecté à partir de la table [Address], puis remplit la liste déroulante ddlAddresses.

La table Address a toutes les mêmes autorisations que le reste des tables de la base de données. J'ai environ 60 tables et environ 200 procédures stockées qui travaillent joyeusement à faire des SELECT, etc. Pas de problème. Sauf pour ce seul problème. Qu'est-ce qui se passe? Je n'ai apporté aucune modification à la base de données ou aux autorisations de table.

Quelqu'un peut-il m'aider s'il-vous-plaît.

Cordialement

Walter

23
Walter Lockhart

Comme le problème l'indique, "l'autorisation SELECT a été refusée sur l'objet" Adresse ", la base de données" CNET_85731 ", le schéma" dbo "".

Je me demande si vous pouvez tout simplement résoudre ceci:

  • Ouvrir le studio de gestion SQL Server
  • Accédez à la base de données 'CNET_85731' >> Sécurité >> Utilisateurs
  • Faites un clic droit sur celui que vous utilisez dans votre code
  • Enfin, sélectionnez " db_datareader " dans la section "Appartenance au rôle de base de données".

Maintenant, j'espère que vous ne devriez plus avoir cette erreur.

61

Eh bien, je ne sais pas quelle était la cause fondamentale de l’autorisation SELECT refusée pour votre utilisateur de base de données, mais si vous exécutez cette opération et qu’elle fonctionne à nouveau, votre autorisation SELECT a été annulée quelque part dans la ligne.

GRANT SELECT ON [dbo].[Address] TO [your user name here]

La bonne nouvelle est que les autorisations ne disparaissent pas comme par magie. la mauvaise nouvelle est que quelque chose (qu’il s’agisse d’outillage ou autre) a effectivement supprimé ou révoqué des autorisations.

Je ne pense pas que nous ayons assez d'informations pour répondre à votre question quant à "pourquoi" c'est arrivé - même si rien de ce que vous avez posté ne semble être le coupable.

14
EPiddy

Dans votre SQL Server Management Studio, cliquez avec le bouton droit de la souris sur votre base de données, puis sur l’autorisation, puis sélectionnez l’utilisateur, puis accordez à sélectionner, modifier, mettre à jour et supprimer. Source http://go4answers.webhost4life.com/Example/select-permission-denied-object-159536.aspx

4
harvey

Eu un rapide Google, trouvé ce lien Lien

Il suggère de courir

select object_name(major_id) as object,
 user_name(grantee_principal_id) as grantee,
 user_name(grantor_principal_id) as grantor,
 permission_name,
 state_desc
from sys.database_permissions
 where major_id = object_id('Users')
 and class = 1

Sur votre base de données pour voir quelles autorisations existent, comme vous pouvez avoir un DENY select

Modifier

select object_name(major_id) as object,
 user_name(grantee_principal_id) as grantee,
 user_name(grantor_principal_id) as grantor,
 permission_name,
 state_desc
from sys.database_permissions
 WHERE state_desc = 'DENY'

Géré pour trouver une boîte SQL 2k8 en cours d'exécution et l'exécutant, cette nouvelle requête affichera tous les .. denés du fichier Essayez également de supprimer la clause WHERE pour afficher toutes les autorisations sur toutes les tables de la base de données sélectionnée

3
PostMan

Si cela vous donne cette erreur dans SQL Server Management Studio, exécutez simplement le serveur SQL Management Studio en tant qu'administrateur qui devrait fonctionner. 

0
patricgh

Supprimez la partie suivante de votre chaîne de connexion. 

Et tout fonctionne bien pour moi.

And everything works fine for me.

0
Mutlu Kaplan