locked
Ayuda con los siguientes queries de SQL Server 2008... RRS feed

  • Pregunta

  • Hola a todos como están...

    He estado investigando acerca de varias función o queries de SQL y la verdad hay varios que no acabo de comprender...

    Primera pregunta: En verdad en esta parte no entendí nada para que es usado esta propiedad…

    PERMISSION_SET = SAFE TRUSTWORTHY OFF

     

    Segunda pregunta: Segun lo que pude leer de esta se encarga de Controlar el bloqueo y la fila de versiones de comportamiento de las instrucciones Transact-SQL emitidas por una conexión a SQL Server, pero la verdad no entendí mucho, ósea esto bloquea las tablas mientras ejecuto la consulta? ….

    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE WITH Customer AS 

    (SELECT * FROM Customer ),

    SalesTotal AS  (SELECT CustomerId, SUM(OderTotal) AS AllOrderTotal FROM SalesOrder)

     

    SELECT, CustomerId, AllOrderTotal

    FROM SalesTotal WHERE AllOrderTotal > 10000.00;

     

    Tercera pregunta: Esta la estoy usando para realizar busquedas en un indice de texto complete, pero la verdad he entendido todos este tipo de consultas menos esta…

    SELECT * FROM Estudiante WHERE CONTAINS(nombre, 'ISABOUT (performance weight (.8), comfortable weight (.4), smooth weight (.2) )' );

    En los libros en línea dice lo siguiente:

    -- The following example searches for all product names containing the words performance, comfortable, or smooth, and different weightings are given to each word.

    Pero no logro captar la idea…

     

    Cuarta pregunta: Diferencias entre Containst y FreeText…

    SELECT * FROM Estudiante WHERE CONTAINS(nombre, ' "Casa" OR "Carro"')

    SELECT * FROM Estudiante WHERE FREETEXT(nombre, 'Casa Carro' );

     

    No comprendo aun las diferencias de esta, entiendo que te traeran todos los registros que contengan el texto casa o carro pero no se la diferencia entre ambas…

     

    Bueno como de costumbre muchas gracias a todos por su gran ayuda…

    viernes, 18 de junio de 2010 22:11

Respuestas

  • Hola.

    Vamos a ir por partes, de momento con la primera de las preguntas.

    Has mezclado dos cosas, una es PERMISSION_SET (nivel de seguridad a la hora de crear un assembly) y otra la marca TRUSTWORTHY (bit de confianza de una base de datos). Puedes encontrar una buena explicación de lo segundo aquí: http://64.4.11.252/es-es/library/bb402845.aspx. Se puede resumir en que si una base de datos está marcada como de confianza puede facilitarse el acceso a determinadas operaciones como la ejecución de assemblies no seguros, un db_owner puede llegar a elevar sus permisos a sysadmin. Es mejor dejarlo como está por defecto (a OFF) salvo circunstancias muy especiales.

    Sobre lo primero (PERMISSION_SET), se explica bastante bien en la ayuda: http://msdn.microsoft.com/es-es/library/ms189524.aspx. Lo mejor es que el nivel sea SAFE, por lo que el assembly en cuestión no podría acceder a nada exterior a SQL Server. Sólo si no hay más remedio habría que elevarlo a EXTERNAL_ACCESS. El caso UNSAFE sería importante evitarlo salvo circunstancias muy excepcionales, ya que da vía libre a la realización de cualquier operación por parte del assembly.

    Si tienes dudas, nos dices.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    sábado, 19 de junio de 2010 15:04
    Moderador

Todas las respuestas

  • Hola.

    Vamos a ir por partes, de momento con la primera de las preguntas.

    Has mezclado dos cosas, una es PERMISSION_SET (nivel de seguridad a la hora de crear un assembly) y otra la marca TRUSTWORTHY (bit de confianza de una base de datos). Puedes encontrar una buena explicación de lo segundo aquí: http://64.4.11.252/es-es/library/bb402845.aspx. Se puede resumir en que si una base de datos está marcada como de confianza puede facilitarse el acceso a determinadas operaciones como la ejecución de assemblies no seguros, un db_owner puede llegar a elevar sus permisos a sysadmin. Es mejor dejarlo como está por defecto (a OFF) salvo circunstancias muy especiales.

    Sobre lo primero (PERMISSION_SET), se explica bastante bien en la ayuda: http://msdn.microsoft.com/es-es/library/ms189524.aspx. Lo mejor es que el nivel sea SAFE, por lo que el assembly en cuestión no podría acceder a nada exterior a SQL Server. Sólo si no hay más remedio habría que elevarlo a EXTERNAL_ACCESS. El caso UNSAFE sería importante evitarlo salvo circunstancias muy excepcionales, ya que da vía libre a la realización de cualquier operación por parte del assembly.

    Si tienes dudas, nos dices.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    sábado, 19 de junio de 2010 15:04
    Moderador
  • Hola.

    Vamos a ir por partes, de momento con la primera de las preguntas.

    Has mezclado dos cosas, una es PERMISSION_SET (nivel de seguridad a la hora de crear un assembly) y otra la marca TRUSTWORTHY (bit de confianza de una base de datos). Puedes encontrar una buena explicación de lo segundo aquí: http://64.4.11.252/es-es/library/bb402845.aspx. Se puede resumir en que si una base de datos está marcada como de confianza puede facilitarse el acceso a determinadas operaciones como la ejecución de assemblies no seguros, un db_owner puede llegar a elevar sus permisos a sysadmin. Es mejor dejarlo como está por defecto (a OFF) salvo circunstancias muy especiales.

    Sobre lo primero (PERMISSION_SET), se explica bastante bien en la ayuda: http://msdn.microsoft.com/es-es/library/ms189524.aspx. Lo mejor es que el nivel sea SAFE, por lo que el assembly en cuestión no podría acceder a nada exterior a SQL Server. Sólo si no hay más remedio habría que elevarlo a EXTERNAL_ACCESS. El caso UNSAFE sería importante evitarlo salvo circunstancias muy excepcionales, ya que da vía libre a la realización de cualquier operación por parte del assembly.

    Si tienes dudas, nos dices.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)


    Hola Alberto muchas gracias... Si entendi lo que me quisistes decir y lo que estaba en los links. pero lo que no he entendido muy bien es el uso de assemblies en SQL... Es algo asi como cuando unos descargar la base de datos AdventureWorks y ejecuta una instalador y automaticamente se instala la base de datos???

    domingo, 20 de junio de 2010 15:49
  • Hola.

    No, eso no tiene nada que ver. Lo de los assemblies hace referencia al uso de CLR dentro del motor de bases de datos. Tú creas una dll en .NET, que incluya una serie de funciones de manejo de cadenas, o lo que se te ocurra. Puedes incluir esa dll como si fuera propia de SQL Server y llamar a las funciones que están en la función.

    http://msdn.microsoft.com/es-es/library/ms254498(VS.80).aspx

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    domingo, 20 de junio de 2010 16:24
    Moderador
  • Hola.

    No, eso no tiene nada que ver. Lo de los assemblies hace referencia al uso de CLR dentro del motor de bases de datos. Tú creas una dll en .NET, que incluya una serie de funciones de manejo de cadenas, o lo que se te ocurra. Puedes incluir esa dll como si fuera propia de SQL Server y llamar a las funciones que están en la función.

    http://msdn.microsoft.com/es-es/library/ms254498(VS.80).aspx

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)

    Ahhh estupendo, me entero que eso se puede hacer, suena super util... Ya ese tema lo entendi... Gracias Alberto...
    domingo, 20 de junio de 2010 17:07
  • Hola.

    Ojo, que el uso del CLR tiene enormes posibilidades, pero no tantas aplicaciones prácticas y entraña todo un conjunto de problemas de rendimiento y seguridad que es preciso dominar para poder utilizarlo con un mínimo grado de calidad.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    domingo, 20 de junio de 2010 17:17
    Moderador
  • Hola.

    Ojo, que el uso del CLR tiene enormes posibilidades, pero no tantas aplicaciones prácticas y entraña todo un conjunto de problemas de rendimiento y seguridad que es preciso dominar para poder utilizarlo con un mínimo grado de calidad.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)

    Entiendo amigo, por lo que veo por los momentops no me metere con eso... Solo lo tendre en cuenta, muchas gracias por la informacion... Y disculpa de nuevo la molestia pero sera que me puedes hechar una mano con las otras preguntas...
    domingo, 20 de junio de 2010 17:49