2010-11-25 39 views
5

Tengo una base de datos de servidor microsoft sql y un conjunto de usuarios. Ahora, en mi aplicación, quiero que algunas funciones solo sean visibles si el usuario ingresó el nombre de usuario y la contraseña con ciertos derechos (administrador). Dado que las bases de datos y los nombres de usuario y sus derechos pueden cambiar, ¿cómo puedo verificar qué permisos/derechos tiene un usuario del servidor microsoft sql?microsoft sql server: verificar los permisos propios de los usuarios

+0

¿Puede aclarar qué tipo de funcionalidad debería ser visible según el nombre de usuario // contraseña? ¿Almacena el nombre de usuario y la contraseña en su base de datos, o quiere decir que es un nombre de usuario/contraseña en la carpeta de seguridad del servidor sql? Parece que desea implementar sus propios niveles de seguridad o un indicador en su tabla de usuario: Usuario {Nombre de usuario, Contraseña, isAdmin}, luego en su aplicación, cuando inician sesión, puede verificar si es un administrador. Si es así, la funcionalidad extra, si no, ocúltela. Además, si tiene muchos niveles diferentes de acceso, considere usar una tabla separada – Prescott

+0

No i no hay funcionalidad adicional. Para ponerlo en términos simples. Imagine que hay n grupos de usuarios. El primero solo puede consultar su servidor. El segundo puede consultar y realizar declaraciones de inserción. El tercero también puede crear vistas ... y así sucesivamente. De hecho, solo quiero saber qué puede hacer el usuario actual en la base de datos. –

+0

Por cierto. no te obsesiones con los grupos No necesitan organizarse en grupos. Solo usuarios múltiples con diferentes permisos. Solo quiero desactivar la funcionalidad en la aplicación, que el actual dbuser no puede usar porque no tiene el permiso necesario en la base de datos. –

Respuesta

6

Puede verificar el derecho del usuario actual en ciertos elementos seleccionables usando [sys.fn_mypermissions][1], que devuelve todos los permisos en el asegurable. También puede verificar un permiso específico con HAS_PERMS_BY_NAME. P.ej. puede comprobar si hay CONTROL SERVER permiso que implica un administrador se registra en:

SELECT HAS_PERMS_BY_NAME(null, null, 'CONTROL SERVER'); 
+0

Gracias, eso es todo. Ahora puedo verificar, por ejemplo, si el usuario tiene la inserción directamente en una determinada base de datos: SELECCIONAR HAS_PERMS_BY_NAME ('databasename', 'DATABASE', 'INSERT') AS Expr1. Y también verifique otros permisos según el enlace de documentación que incluyó. –

0

No estoy completamente seguro de que entiendo su definición del problema, sin embargo suponiendo que hago .....

Yo sugeriría que se crea una función de base de datos SQL Server que se puede añadir a los usuarios de las aplicaciones pertinentes a, quizás a través de una membresía grupal mantenida dentro de la Aplicación (o un Grupo de Dominio de Windows). Puede usar el grupo para asignación de roles para administrar de forma independiente la membresía del usuario, desde la administración de los permisos relevantes hasta los elementos asegurables dentro de la base de datos a través del Rol.

De esta manera, solo necesita comprobar que una aplicación El usuario es miembro de la aplicación o grupo de ventanas correspondiente, sin la necesidad de consultar la configuración de seguridad de SQL Server.

+0

Desde una perspectiva de diseño, todavía no veo por qué necesita "verificar" los permisos. Los permisos se otorgan mediante la membresía al Rol apropiado, a la cual valida la autenticación de usuario que tiene en su lugar. Simplemente cree un Rol con los derechos de "administrador" requeridos y un Rol con los derechos de usuario requeridos. A continuación, agregue/asigne los usuarios a los roles relevantes. Entonces no necesitaría verificar/validar los permisos porque el hecho de que el usuario pueda iniciar sesión con las credenciales correctas cumple esta función. –

0

La forma más sencilla de hacer esto es mediante la función IS_MEMBER, que comprueba wether el usuario está en el db_owner/grupo. La función realizará una comprobación en el nivel de la base de datos. Si necesita verificar en el nivel del servidor, puede usar la función IS_SRVROLEMEMBER. Ambos están disponibles desde el servidor sql 2005.

Cuestiones relacionadas