{"id":552,"date":"2017-06-28T21:10:17","date_gmt":"2017-06-28T21:10:17","guid":{"rendered":"http:\/\/www.manualsqlserver.com\/?p=552"},"modified":"2020-05-20T21:49:44","modified_gmt":"2020-05-20T21:49:44","slug":"roles-de-aplicacion-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=552","title":{"rendered":"Roles de aplicaci\u00f3n en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"259\" height=\"262\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_RolesAplicacion_D.png\" alt=\"\" class=\"wp-image-1350\"\/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Roles de Aplicaci\u00f3n<\/strong><\/h1>\n\n\n\n<ul class=\"wp-block-list\"><li>Una funci\u00f3n de aplicaci\u00f3n es un objeto de base de datos que permite que una aplicaci\u00f3n ejecute con sus propios permisos similares a los de un usuario.<\/li><li>Puede utilizar funciones de aplicaci\u00f3n para permitir el acceso a datos espec\u00edficos s\u00f3lo a aquellos usuarios que se conectan a trav\u00e9s de una aplicaci\u00f3n concreta. A diferencia de las funciones de la base de datos, las &nbsp;funciones de la aplicaci\u00f3n no contienen miembros y est\u00e1n inactivas de forma predeterminada.<\/li><li>Los roles de aplicaci\u00f3n funcionan con ambos modos de autenticaci\u00f3n.<\/li><li>Las funciones de aplicaci\u00f3n se habilitan mediante el procedimiento almacenado sp_setapprole, que requiere<br>una contrase\u00f1a.<\/li><li>Dado que los roles de aplicaci\u00f3n son un principal de nivel de base de datos, pueden acceder a otras bases de datos s\u00f3lo a trav\u00e9s de permisos concedidos en esas bases de datos al invitado. Por lo tanto, cualquier base de datos en la que el invitado se haya inhabilitado ser\u00e1 inaccesible a las funciones de la aplicaci\u00f3n en otras bases de datos.<\/li><\/ul>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conectarse con un rol de aplicaci\u00f3n<\/strong><\/h2>\n\n\n\n<p><strong>Para hacer efectivos los permisos de un rol de aplicaci\u00f3n se siguen los siguientes pasos: <\/strong><\/p>\n\n\n\n<p>1. Un usuario ejecuta una aplicaci\u00f3n cliente.<br>2. La aplicaci\u00f3n cliente se conecta a una instancia de SQL Server como el usuario.<br>3. Desde la aplicaci\u00f3n se ejecuta el procedimiento almacenado <strong>sp_setapprole <\/strong>guardado con una contrase\u00f1a conocida \u00fanicamente por la aplicaci\u00f3n.<br>4. Si el nombre y la contrase\u00f1a de la funci\u00f3n de aplicaci\u00f3n son v\u00e1lidos, se habilita la funci\u00f3n de aplicaci\u00f3n.<br>5. En este punto, la conexi\u00f3n pierde los permisos del usuario y asume los permisos de la funci\u00f3n de la aplicaci\u00f3n.<br>Los permisos se pierden al desconectarse de la aplicaci\u00f3n.<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Crear Roles de Aplicaci\u00f3n<\/strong><\/h2>\n\n\n\n<p><strong>Instrucci\u00f3n: Create Application Role<\/strong><br>Permite crear un rol de aplicaci\u00f3n<br>Sintaxis:<\/p>\n\n\n\n<p>CREATE APPLICATION ROLE NombreRolAplicacion<br>WITH PASSWORD = &#8216;password&#8217; [, DEFAULT_SCHEMA = NombreEsquema ]<\/p>\n\n\n\n<p>Donde:<br><strong>NombreRolAplicacion<\/strong> es el nombre del rol de aplicaci\u00f3n a crear.<br><strong>DEFAULT_SCHEMA = NombreEsquema<\/strong> especifica el esquema por defecto para el rol de aplicaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Modificar Roles de Aplicaci\u00f3n<\/strong><\/h2>\n\n\n\n<p>Instrucci\u00f3n: Alter Application Role<br>Permite modificar un rol de aplicaci\u00f3n<br>Sintaxis:<\/p>\n\n\n\n<p>ALTER APPLICATION ROLE NombreRolAplicacion<br>WITH NAME = NuevoNombre<br>| PASSWORD = &#8216;password&#8217;<br>| DEFAULT_SCHEMA = NombreEsquema<\/p>\n\n\n\n<p>Donde:<br><strong>NombreRolAplicacion<\/strong> es el nombre del rol de aplicaci\u00f3n a modificar.<br><strong>With name = NuevoNombre<\/strong> especifica el nuevo nombre para el rol de aplicaci\u00f3n.<br><strong>Password = &#8216;password&#8217;<\/strong> permite especificar el nuevo password del rol de aplicaci\u00f3n.<br><strong>DEFAULT_SCHEMA = NombreEsquema<\/strong> especifica el esquema por defecto para el rol de aplicaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Eliminar Roles de Aplicaci\u00f3n<\/strong><\/h2>\n\n\n\n<p>Instrucci\u00f3n: Drop Application Role<br>Permite eliminar un rol de aplicaci\u00f3n<br>Sintaxis:<\/p>\n\n\n\n<p>Drop APPLICATION ROLE NombreRolAplicacion<\/p>\n\n\n\n<p>Donde:<br><strong>NombreRolAplicacion<\/strong> es el nombre del rol de aplicaci\u00f3n a eliminar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Ejercicios:<\/strong><\/h2>\n\n\n\n<p>Usando AdventureWorks<br>use AdventureWorks<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 1<\/strong><br><strong>Crear un rol de aplicaci\u00f3n llamado Ventas y asignarle el esquema Sales<\/strong><\/p>\n\n\n\n<p>Create application role Ventas with password = &#8216;5286&#8217;, default_schema = Sales<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 2<\/strong><br><strong>Crear un rol de aplicaci\u00f3n llamado Administrador<\/strong><\/p>\n\n\n\n<p>Create application role Administrador with password = &#8216;delunoalocho&#8217;<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 3<\/strong><br><strong>Asignar el permiso de lectura al rol Administrador sobre el esquema Production<\/strong><\/p>\n\n\n\n<p>Grant select on schema::Production to Administrador<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 4<\/strong><br><strong>Cambiar el password del rol de aplicaci\u00f3n Administrador a &#8216;SinClave&#8217;<\/strong><\/p>\n\n\n\n<p>Alter application role Administrador with password = &#8216;SinClave&#8217;<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 5<\/strong><br><strong>Cambiar el esquema del rol de aplicaci\u00f3n Ventas a Purchasing<\/strong><\/p>\n\n\n\n<p>Alter application role Ventas with DEFAULT_SCHEMA = Purchasing<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 6<\/strong><br><strong>Ver los roles de aplicaci\u00f3n<\/strong><\/p>\n\n\n\n<p>select * from sys.database_principals where type = &#8216;A&#8217;<br>go<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Activar un rol de aplicaci\u00f3n<\/strong><\/h2>\n\n\n\n<p><strong>Procedimiento sp_setapprole<\/strong><br>Activa los permisos asociados con el rol de aplicaci\u00f3n en la base de datos.<br>Sintaxis:<\/p>\n\n\n\n<p>sp_setapprole [ @rolename = ] &#8216;NombreRol&#8217;,<br>[ @password = ] { encrypt N&#8217;password&#8217; }<br>[ @fCreateCookie = ] true | false ]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ejemplos<\/strong><\/h3>\n\n\n\n<p><strong>Ejercicio 7<\/strong><br><strong>Activar el rol de aplicaci\u00f3n Ventas<\/strong><\/p>\n\n\n\n<p>Exec sp_setapprole Ventas,5286<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 8<\/strong><br><strong>Crear un rol de aplicaci\u00f3n llamado Contador, asignar el esquema Person&nbsp;y luego activar el rol de aplicaci\u00f3n y crear una Cookie.<\/strong><\/p>\n\n\n\n<p>Create application role Contador with password = &#8216;Cero333&#8217;<br>go<br>DECLARE @cookie varbinary(8000)<br>Exec sp_setapprole Contador, Cero333 ,<br>@fCreateCookie = true, @cookie = @cookie OUTPUT<br>go<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Procedimiento almacenado sp_unsetapprole<\/strong><\/h3>\n\n\n\n<p>Desactiva un rol de aplicaci\u00f3n y regresa al contexto de seguridad previo.<br>Sintaxis:<\/p>\n\n\n\n<p>sp_unsetapprole @cookie<\/p>\n\n\n\n<p>La @Cookie es creada por sp_setapprole<\/p>\n\n\n\n<p><strong>Ejercicio 9<\/strong><br><strong>Desactivar el rol de aplicaci\u00f3n Contador<\/strong><\/p>\n\n\n\n<p>sp_unsetapprole @cookie<br>go<br>Nota: Esta instrucci\u00f3n no se puede probar desde SQL Server, salvo que<br>ejecute en el mismo bloque la activaci\u00f3n y desactivaci\u00f3n del rol de aplicaci\u00f3n.<br>Ejemplo<\/p>\n\n\n\n<p><strong>Ejercicio 10<\/strong><br><strong>Crear un rol de aplicaci\u00f3n Almacen luego activarlo y desactivarlo mostrando el usuario del contexto.<\/strong><\/p>\n\n\n\n<p>Create application role Almacen with password = &#8216;TrainSQL&#8217;<br>go<br>DECLARE @cookie varbinary(8000)<br>Exec sp_setapprole Almacen, TrainSQL ,<br>@fCreateCookie = true, @cookie = @cookie OUTPUT<br>Select USER_NAME() As &#8216;Contexto Aplicaci\u00f3n&#8217;<br>Exec sp_unsetapprole @cookie<br>select USER_NAME() As &#8216;Contexto por defecto&#8217;<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_RolesAplicacion_01.png\" alt=\"\" class=\"wp-image-1349\" width=\"847\" height=\"471\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_RolesAplicacion_01.png 868w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_RolesAplicacion_01-300x167.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_RolesAplicacion_01-768x428.png 768w\" sizes=\"auto, (max-width: 847px) 100vw, 847px\" \/><\/figure><\/div>\n\n\n\n<p><strong>Ejercicio 11<\/strong><br><strong>Eliminar el rol de aplicaci\u00f3n Almacen<\/strong><\/p>\n\n\n\n<p>Drop application role Almacen<br>go<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Roles de Aplicaci\u00f3n Una funci\u00f3n de aplicaci\u00f3n es un objeto de base de datos que permite que una aplicaci\u00f3n ejecute con sus propios permisos similares a los de un usuario. Puede utilizar funciones de aplicaci\u00f3n para permitir el acceso a datos espec\u00edficos s\u00f3lo a aquellos usuarios que se conectan a trav\u00e9s de una aplicaci\u00f3n concreta. &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=552\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1350,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,10],"tags":[31,49,53],"class_list":["post-552","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","category-seguridad","tag-funciones-de-base-de-datos","tag-roles-de-aplicacion","tag-sqlserver","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=552"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/552\/revisions"}],"predecessor-version":[{"id":1352,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/552\/revisions\/1352"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1350"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}