{"id":2069,"date":"2014-02-16T11:00:41","date_gmt":"2014-02-16T16:00:41","guid":{"rendered":"http:\/\/sqlity.net\/en\/?p=2069"},"modified":"2014-11-13T13:16:31","modified_gmt":"2014-11-13T18:16:31","slug":"deny-cascade","status":"publish","type":"post","link":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/","title":{"rendered":"DENY CASCADE does not CASCADE the DENY"},"content":{"rendered":"<div>\n<h3>Introduction<\/h3>\n<p>\nOne of the more rarely used forms of the <span class=\"tt\">DENY<\/span> statement is <span class=\"tt\">DENY CASCADE<\/span>. I have to admit that you would need to use it only in kind of an edge case. However, if you ever come across it, it does not actually do what it says is does.\n<\/p>\n<h3>DENY CASCADE Example<\/h3>\n<p>\nTo see what it is actually doing let's look at an example. First we need two users, a schema and a table:\n<\/p>\n<div>\n[sql]\nCREATE LOGIN TestLogin1 WITH PASSWORD='********', CHECK_POLICY = OFF;<br \/>\nCREATE LOGIN TestLogin2 WITH PASSWORD='********', CHECK_POLICY = OFF;<\/p>\n<p>CREATE USER TestUser1 FOR LOGIN TestLogin1;<br \/>\nCREATE USER TestUser2 FOR LOGIN TestLogin2;<br \/>\nGO<br \/>\nCREATE SCHEMA TestSchema1;<br \/>\nGO<br \/>\nCREATE TABLE TestSchema1.tst(id INT);<br \/>\nINSERT INTO TestSchema1.tst VALUES(42);<br \/>\n[\/sql]\n<\/p><\/div>\n<p>\nThe <span class=\"tt\">DENY CASCADE<\/span> statement looks similar to the <span class=\"tt\">REVOKE CASCADE<\/span> statement that I described two weeks ago in <a href=\"http:\/\/sqlity.net\/en\/1967\/revoke-grant-with-grant-option\/\">How to REVOKE a GRANT \u2026 WITH GRANT OPTION<\/a>. It seems to have to do with permissions that where granted based on a grantable grant. So to start out we are going to <span class=\"tt\">GRANT SELECT WITH GRANT OPTION<\/span> on our table to <span class=\"tt\">TestUser1<\/span> and have <span class=\"tt\">TestUser1<\/span> then <span class=\"tt\">GRANT SELECT<\/span> to <span class=\"tt\">TestUser2<\/span>:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg\" alt=\"A grantable GRANT in action.\" width=\"763\" height=\"461\" class=\"aligncenter size-full wp-image-2074\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg 763w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action-300x181.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action-150x90.jpg 150w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/a>\n<\/p>\n<p>\nWe know already that we cannot just call <span class=\"tt\">REVOKE<\/span> on the grantable permission but instead have to use <span class=\"tt\">REVOKE CASCADE<\/span>. Let's try if we can simply <span class=\"tt\">DENY<\/span> the permission:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_on_grantable_GRANT_fails.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_on_grantable_GRANT_fails.jpg\" alt=\"DENY on a grantable GRANT fails.\" width=\"763\" height=\"461\" class=\"aligncenter size-full wp-image-2073\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_on_grantable_GRANT_fails.jpg 763w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_on_grantable_GRANT_fails-300x181.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_on_grantable_GRANT_fails-150x90.jpg 150w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/a>\n<\/p>\n<p>\nSQL Server does throw the same error message for both <span class=\"tt\">REVOKE<\/span> and <span class=\"tt\">DENY<\/span> when used without the <span class=\"tt\">CASCADE<\/span> keyword against a grantable permission. So let's try to use it with that keyword:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_removes_child_permissions.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_removes_child_permissions.jpg\" alt=\"DENY CASCADE removes child permissions.\" width=\"763\" height=\"461\" class=\"aligncenter size-full wp-image-2072\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_removes_child_permissions.jpg 763w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_removes_child_permissions-300x181.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_removes_child_permissions-150x90.jpg 150w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/a>\n<\/p>\n<p>\nIt actually did invalidate the permission of <span class=\"tt\">TestUser2<\/span> too. So the <span class=\"tt\">CASCADE<\/span> keyword does cause some kind of cascading. But what does it actually do with those child level permissions? If you just go by the sound of the statement itself, you are probably thinking that it denies the permission to <span class=\"tt\">TestUser1<\/span> and all users that <span class=\"tt\">TestUser1<\/span> has granted it to. However, that is not the case.\n<\/p>\n<p>\n<span class=\"tt\">DENY CASCADE<\/span> merely executes a <span class=\"tt\">REVOKE CASCADE<\/span> followed by a simple <span class=\"tt\">DENY<\/span>. The <span class=\"tt\">DENY<\/span> itself does not get cascaded.\n<\/p>\n<p>\nTo confirm that, we need to use an indirect testing technique. In my part 3 of my series comparing the <span class=\"tt\">DENY<\/span> and <span class=\"tt\">REVOKE<\/span> statements we talked about <a href=\"http:\/\/sqlity.net\/en\/2009\/deny-vs-revoke-3\/\">Hierarchies of securables<\/a>. There we saw that a <span class=\"tt\">GRANT<\/span> on say a schema gets overridden by a <span class=\"tt\">DENY<\/span> on the table itself.\n<\/p>\n<p>\nWe can re-confirm that quickly by granting <span class=\"tt\">SELECT<\/span> on <span class=\"tt\">TestSchema1<\/span> to <span class=\"tt\">TestUser1<\/span>:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_DENY__the_permission_itself.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_DENY__the_permission_itself.jpg\" alt=\"DENY CASCADE does DENY the permission itself.\" width=\"763\" height=\"426\" class=\"aligncenter size-full wp-image-2070\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_DENY__the_permission_itself.jpg 763w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_DENY__the_permission_itself-300x167.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_DENY__the_permission_itself-150x83.jpg 150w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/a>\n<\/p>\n<p>\nAs expected, that <span class=\"tt\">GRANT<\/span> did not cause <span class=\"tt\">TestUser1<\/span> to be able to access the table. Now, if the <span class=\"tt\">SELECT<\/span> privilege was actually denied to <span class=\"tt\">TestUser2<\/span> as well, we should see the same behavior when granting <span class=\"tt\">SELECT<\/span> on the schema to <span class=\"tt\">TestUser2<\/span>. Let's try:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_not_DENY_child_permissions.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_not_DENY_child_permissions.jpg\" alt=\"DENY CASCADE does not DENY child permissions.\" width=\"763\" height=\"461\" class=\"aligncenter size-full wp-image-2071\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_not_DENY_child_permissions.jpg 763w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_not_DENY_child_permissions-300x181.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/DENY_CASCADE_does_not_DENY_child_permissions-150x90.jpg 150w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/a>\n<\/p>\n<p>\nAs you can see, a simple <span class=\"tt\">GRANT SELECT<\/span> on <span class=\"tt\">TestSchema1<\/span> to <span class=\"tt\">TestUser2<\/span> gives <span class=\"tt\">TestUser2<\/span> access to the table again. That means, what the <span class=\"tt\">DENY CASCADE<\/span> did to the <span class=\"tt\">SELECT<\/span> privilege of <span class=\"tt\">TestUser2<\/span> cannot have been a <span class=\"tt\">DENY<\/span>, only a <span class=\"tt\">REVOKE<\/span>.\n<\/p>\n<h3>Summary<\/h3>\n<p>\nWhile <span class=\"tt\">DENY CASCADE<\/span> might sound like the <span class=\"tt\">DENY<\/span> is being cascaded, that is not actually the case. Instead it just acts like a <span class=\"tt\">REVOKE CASCADE<\/span> followed by a simple <span class=\"tt\">DENY<\/span> without the <span class=\"tt\">CASCADE<\/span> option.\n<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>What the DENY CASCADE statement does seems obvious. But is it? Read on to see what DENY CASCADE actually does and if that matches your expectation.<\/p>\n<p> <a href=\"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/\">[more&#8230;]<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[5,34,99],"tags":[103,113,88,98,100,38,58,15],"class_list":["post-2069","post","type-post","status-publish","format-standard","hentry","category-general","category-security","category-security-pitfalls","tag-deny","tag-deny-cascade","tag-grant","tag-revoke","tag-revoke-cascade","tag-security-2","tag-security-management","tag-sql-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DENY CASCADE does not CASCADE the DENY - sqlity.net<\/title>\n<meta name=\"description\" content=\"What the DENY CASCADE statement does seems obvious. But is it? Read on to see what DENY CASCADE actually does and if that matches your expectation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DENY CASCADE does not CASCADE the DENY - sqlity.net\" \/>\n<meta property=\"og:description\" content=\"What the DENY CASCADE statement does seems obvious. But is it? Read on to see what DENY CASCADE actually does and if that matches your expectation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/\" \/>\n<meta property=\"og:site_name\" content=\"sqlity.net\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/sqlity.net\" \/>\n<meta property=\"article:published_time\" content=\"2014-02-16T16:00:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-11-13T18:16:31+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg\" \/>\n<meta name=\"author\" content=\"Sebastian Meine\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sqlity\" \/>\n<meta name=\"twitter:site\" content=\"@sqlity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sebastian Meine\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/\"},\"author\":{\"name\":\"Sebastian Meine\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"headline\":\"DENY CASCADE does not CASCADE the DENY\",\"datePublished\":\"2014-02-16T16:00:41+00:00\",\"dateModified\":\"2014-11-13T18:16:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/\"},\"wordCount\":625,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/02\\\/grantable_GRANT_in_action.jpg\",\"keywords\":[\"DENY\",\"DENY CASCADE\",\"GRANT\",\"REVOKE\",\"REVOKE CASCADE\",\"security\",\"security management\",\"SQL Server\"],\"articleSection\":[\"General\",\"Security\",\"Security Pitfalls\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/\",\"name\":\"DENY CASCADE does not CASCADE the DENY - sqlity.net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/02\\\/grantable_GRANT_in_action.jpg\",\"datePublished\":\"2014-02-16T16:00:41+00:00\",\"dateModified\":\"2014-11-13T18:16:31+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"description\":\"What the DENY CASCADE statement does seems obvious. But is it? Read on to see what DENY CASCADE actually does and if that matches your expectation.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/#primaryimage\",\"url\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/02\\\/grantable_GRANT_in_action.jpg\",\"contentUrl\":\"http:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/02\\\/grantable_GRANT_in_action.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2069\\\/deny-cascade\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DENY CASCADE does not CASCADE the DENY\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\",\"name\":\"sqlity.net\",\"description\":\"Quality for SQL\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sqlity.net\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\",\"name\":\"Sebastian Meine\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"caption\":\"Sebastian Meine\"},\"sameAs\":[\"http:\\\/\\\/sqlity.net\",\"https:\\\/\\\/x.com\\\/sqlity\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DENY CASCADE does not CASCADE the DENY - sqlity.net","description":"What the DENY CASCADE statement does seems obvious. But is it? Read on to see what DENY CASCADE actually does and if that matches your expectation.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/","og_locale":"en_US","og_type":"article","og_title":"DENY CASCADE does not CASCADE the DENY - sqlity.net","og_description":"What the DENY CASCADE statement does seems obvious. But is it? Read on to see what DENY CASCADE actually does and if that matches your expectation.","og_url":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/","og_site_name":"sqlity.net","article_publisher":"https:\/\/www.facebook.com\/sqlity.net","article_published_time":"2014-02-16T16:00:41+00:00","article_modified_time":"2014-11-13T18:16:31+00:00","og_image":[{"url":"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg","type":"","width":"","height":""}],"author":"Sebastian Meine","twitter_card":"summary_large_image","twitter_creator":"@sqlity","twitter_site":"@sqlity","twitter_misc":{"Written by":"Sebastian Meine","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/#article","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/"},"author":{"name":"Sebastian Meine","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"headline":"DENY CASCADE does not CASCADE the DENY","datePublished":"2014-02-16T16:00:41+00:00","dateModified":"2014-11-13T18:16:31+00:00","mainEntityOfPage":{"@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/"},"wordCount":625,"commentCount":0,"image":{"@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/#primaryimage"},"thumbnailUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg","keywords":["DENY","DENY CASCADE","GRANT","REVOKE","REVOKE CASCADE","security","security management","SQL Server"],"articleSection":["General","Security","Security Pitfalls"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sqlity.net\/en\/2069\/deny-cascade\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/","url":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/","name":"DENY CASCADE does not CASCADE the DENY - sqlity.net","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/#primaryimage"},"image":{"@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/#primaryimage"},"thumbnailUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg","datePublished":"2014-02-16T16:00:41+00:00","dateModified":"2014-11-13T18:16:31+00:00","author":{"@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"description":"What the DENY CASCADE statement does seems obvious. But is it? Read on to see what DENY CASCADE actually does and if that matches your expectation.","breadcrumb":{"@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sqlity.net\/en\/2069\/deny-cascade\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/#primaryimage","url":"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg","contentUrl":"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/02\/grantable_GRANT_in_action.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/sqlity.net\/en\/2069\/deny-cascade\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sqlity.net\/en\/"},{"@type":"ListItem","position":2,"name":"DENY CASCADE does not CASCADE the DENY"}]},{"@type":"WebSite","@id":"https:\/\/sqlity.net\/en\/#website","url":"https:\/\/sqlity.net\/en\/","name":"sqlity.net","description":"Quality for SQL","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sqlity.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c","name":"Sebastian Meine","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","caption":"Sebastian Meine"},"sameAs":["http:\/\/sqlity.net","https:\/\/x.com\/sqlity"]}]}},"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2wXuw-xn","jetpack-related-posts":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/2069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/comments?post=2069"}],"version-history":[{"count":0,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/2069\/revisions"}],"wp:attachment":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media?parent=2069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/categories?post=2069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/tags?post=2069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}