2009-07-28 55 views
22

He estado trabajando durante los últimos 7 meses en C# ASP.NET usando Visual Studio 2008 y SQL Server 2008.El permiso SELECT fue denegado en el objeto 'Dirección', base de datos 'CNET_85731', esquema 'dbo'

Hoy en día, yo estaba corriendo parte de mi solicitud que fue previamente en marcha y me dio el siguiente error:

el permiso SELECT fue denegado en el objeto 'Dirección', base de datos 'CNET_85731', esquema 'dbo'.

caminaba a través de mi código y descubrieron que este error era causado en el siguiente control de usuario:

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

la SQLDataSource se define como sigue:

<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> 

Básicamente, lo que hace el control de es recuperar una lista de direcciones para el usuario conectado de la tabla [Dirección] y luego completar la lista desplegable ddlAddresses.

La tabla de direcciones tiene los mismos permisos que el resto de las tablas en la base de datos. Tengo alrededor de 60 tablas y aproximadamente 200 procedimientos almacenados, todos trabajando alegremente lejos haciendo SELECT, etc. No hay problema. Excepto por este problema. ¿Qué diablos está pasando? No realicé ningún cambio en la base de datos ni en los permisos de la tabla.

¿Alguien puede ayudarme por favor?

Saludos

Walter

+0

¿La cadena de conexión apunta a la base de datos correcta (una que tiene la configuración de permisos adecuada)? – shahkalpesh

+0

Sí. la cadena de conexión en web.config es la siguiente: Uso esta misma cadena de conexión para acceder a la base de datos en todo momento. –

+0

¿Ha cambiado algo con el inicio de sesión de Windows que está vinculado al servidor sql? – shahkalpesh

Respuesta

14

Bueno, no estoy seguro de lo que era la causa fundamental para el permiso SELECT denegado para el usuario db pero si se ejecuta este y luego en realidad funciona de nuevo, entonces en algún punto la línea, tu permiso SELECT fue aniquilado.

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

La buena noticia es que los permisos no desaparecen mágicamente; las malas noticias son algo (ya sea herramientas o de otro tipo) que de hecho eliminar o revocar permisos.

no creo que tenemos suficiente información para responder a su pregunta de "por qué" sucedió - si bien, nada de lo que has publicado parece ser el culpable.

+0

Hola EPiddy, Sí, estoy de acuerdo, los permisos no desaparecen. He intentado lo siguiente como se sugiere: GRANT SELECT ON [dbo] [Dirección] para [POSITIVECODE-UW \ ASPNET] donde 'POSITIVECODE-UW \ ASPNET' es la cuenta ASPNET.. El comando se completó correctamente en SQL Server, pero desafortunadamente aún obtengo el mismo error: Se denegó el permiso SELECT en el objeto 'Dirección', base de datos 'CNET_85731', esquema 'dbo'. Gracias por su sugerencia. Saludos Walter –

+0

Incluso intenté poner el comando SELECCIONAR en un procedimiento almacenado y llamar al procedimiento almacenado desde el SqlDataSource. Nada. Solo estoy agarrando desesperadamente las pajitas. –

+1

Funciona para mí ... Gracias – Muthukumar

3

Tenía una rápida de Google, que se encuentra este enlace Link

Se sugiere correr

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 

En su base de datos para ver qué existen los permisos, ya que puede tener un DENY seleccione

Editar

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' 

Administrado para encontrar un cuadro SQL 2k8 en ejecución y ejecutarlo, esta nueva consulta mostrará todas las denegaciones. Prueba también tomar la cláusula WHERE a cabo, para ver todos los permisos en todas las tablas de la base de datos seleccionada en ese momento

+0

Gracias PostMan. Ejecuté esta consulta y me devolvió 0 filas. Supongo que es correcto? –

+0

Ver la edición, debería devolver información más útil – PostMan

+0

Dejar caer y volver a crear la tabla tampoco funcionaba. –

59

Como estados problemáticos, "El permiso SELECT se le negó en la 'dirección' objeto, base de datos 'CNET_85731', esquema 'dbo' ".

Me pregunto se puede resolver simplemente de esta manera: >> Usuarios estudio

  • Abra SQL Server Management
  • Vaya a la base de datos 'CNET_85731' >> Seguridad
  • Haga clic derecho sobre el que Está utilizando en su código
  • Y, por último, simplemente seleccione 'db_datareader' en la sección "Membresía de la función de base de datos".

Ahora, espero que no vuelva a aparecer este error.

+7

O en lugar de seleccionar 'db_datareader'uncheck' db_denydatareader ' – CodingBarfield

+5

Gracias. Desmarcar 'db_denydatareader' y 'db_denydatawriter' funcionó para mí. – jiminy

+1

No, esto no ayudó en mi caso. Se necesita "Conceder selección al usuario", mira la respuesta de EPiddys. – AGuyCalledGerald

0

Si le da ese error dentro de SQL Server Management Studio, simplemente ejecute SQL Server Management Studio como administrador que debería funcionar.

0

Elimina la siguiente parte de tu cadena de conexión;

In‌​tegrated Security=True;

Y todo funciona bien para mí.

Cuestiones relacionadas