Principales respuestas
Dar permisos en Vistas

Pregunta
-
Hola a todos!!!
Bueno resulta que estoy haciendo un ejercicio de vistas en sql y no me sale, a ver si me podriais ayudar, el ejercicio es el siguiente:
Crear una vista llamada VJUBIL1 en la que aparezcan todos los datos de los empleados que cumplen 65 años de edad este año, de modo que puedan ser consultados solamente por el director de Personal, suponiendo que el identificador de éste es: U0150
Yo tengo hecho esto:
create view VJUBIL1 as select * from temple where (DATEDIFF(DAY,fecna,GETDATE())/365.25)>65
Pero me falta decirle "que puedan ser consultados solamente por el director de Personal, suponiendo que el identificador de éste es: U0150"
¿Come puedo dar permisos solo al director? y ¿que es eso del identificador si no hay ningun campo con ese nombre?
Muchas gracias por vuestra ayuda besoss!!!
Respuestas
-
Hola.Por identificador, lo más simple sería traducirlo por usuario, es decir, en la base de datos existe un usuario, U0150, que es el que usa el director de Personal. de esta forma, lo que te faltaría sería, por un lado, impedir que todos los demás usuarios puedan leer la tabla temple y de la vista, y que además el usuario en cuestión sí que pudiera leerlos:
deny select on temple to usu1, usu2, ... deny select on VJUBIL1 to usu1, usu2, ... grant select on VJUBIL1 to U0150
El "deny" del centro no tendría que ser necesario.Aunque no lo comentas, creo que el where de tu vista no es correcto. Te indican que salgan los empleados que cumplen 65 años este año, sin embargo tú muestras los que tengan hoy más de 65 años.Una resta nos indica que los empleados que cumplen 65 este año son los que nacieron en 1945. Si lo queremos hacer independiente del momento en que se ejecute la consulta, sería:year(getdate()) - 65Así que tenemos que filtrar los usuarios que nacieron ese año:create view VJUBIL1 as select * from temple where fecna between cast(cast(year(getdate()) - 65 as char(4)) + '0101' as smalldatetime) and cast(cast(year(getdate()) - 65 as char(4)) + '1231' as smalldatetime)
Si tienes dudas, nos dices.
Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 7 de marzo de 2010 18:09
- Marcado como respuesta Rafael Fagundes lunes, 15 de marzo de 2010 0:38
Todas las respuestas
-
Hola.Por identificador, lo más simple sería traducirlo por usuario, es decir, en la base de datos existe un usuario, U0150, que es el que usa el director de Personal. de esta forma, lo que te faltaría sería, por un lado, impedir que todos los demás usuarios puedan leer la tabla temple y de la vista, y que además el usuario en cuestión sí que pudiera leerlos:
deny select on temple to usu1, usu2, ... deny select on VJUBIL1 to usu1, usu2, ... grant select on VJUBIL1 to U0150
El "deny" del centro no tendría que ser necesario.Aunque no lo comentas, creo que el where de tu vista no es correcto. Te indican que salgan los empleados que cumplen 65 años este año, sin embargo tú muestras los que tengan hoy más de 65 años.Una resta nos indica que los empleados que cumplen 65 este año son los que nacieron en 1945. Si lo queremos hacer independiente del momento en que se ejecute la consulta, sería:year(getdate()) - 65Así que tenemos que filtrar los usuarios que nacieron ese año:create view VJUBIL1 as select * from temple where fecna between cast(cast(year(getdate()) - 65 as char(4)) + '0101' as smalldatetime) and cast(cast(year(getdate()) - 65 as char(4)) + '1231' as smalldatetime)
Si tienes dudas, nos dices.
Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator domingo, 7 de marzo de 2010 18:09
- Marcado como respuesta Rafael Fagundes lunes, 15 de marzo de 2010 0:38
-
Buenos dia,
Soy nuevo en el foro y no encuentro el tema relacionado a mi problema, ojala puedas ayudarme. He creado una vista, la he unido a un esquema (para gerente ventas, el cual tiene un usuario y tiene la funcion de servidor PUBLIC) y deseo que el gerente solo vea las vistas que cree para él por EXCEL 2007. El problema que tengo es que cuando lo cargo por excel cargan las tablas pero no las vistas, sale un mensaje que no hay la base de datos o ha sido reorganizada. Si le pongo en funciones de servidor SYSADMN me carga las vista que le cree pero tambien muestra las tablas y vistas que no le pertencen. Por favor ayudenme.... Saludos
-