none
Dar permisos en Vistas RRS feed

  • 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!!!
    domingo, 7 de marzo de 2010 16:12

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()) - 65

    Así 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/)
    domingo, 7 de marzo de 2010 18:09
    Moderador

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()) - 65

    Así 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/)
    domingo, 7 de marzo de 2010 18:09
    Moderador
  • 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

    lunes, 18 de octubre de 2010 16:18
  • Hola,

    Gracias por la información nos ha sido de gran ayuda para generar los permisos para la vista en un bbdd de Azure.

    Saludos

    jueves, 12 de noviembre de 2015 11:24