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 + ' -- ' + 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
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:
Maintenant, j'espère que vous ne devriez plus avoir cette erreur.
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.
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
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
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.
Supprimez la partie suivante de votre chaîne de connexion.
Et tout fonctionne bien pour moi.
And everything works fine for me.