{"id":1101,"date":"2025-07-25T09:00:00","date_gmt":"2025-07-25T14:00:00","guid":{"rendered":"https:\/\/www.sqltabletalk.com\/?p=1101"},"modified":"2025-07-24T22:47:21","modified_gmt":"2025-07-25T03:47:21","slug":"schema-level-permissions-ownership-chaining-sql-server","status":"publish","type":"post","link":"https:\/\/www.sqltabletalk.com\/?p=1101","title":{"rendered":"SQL Server Permissions and Ownership Chaining"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>Designing a reporting layer that protects sensitive data takes more than hiding tables behind a view. You must understand how schema permissions and ownership chaining interact, or a well\u2011meant deny can suddenly block your users\u2014or worse, let them see columns you thought were private. The walk\u2011through below shows the entire life\u2011cycle of a common scenario:<\/p>\n<ol>\n<li>Build an HR table that holds confidential columns.<\/li>\n<li>Expose a summary view in a separate schema.<\/li>\n<li>Grant a reporting role access to the view but explicitly deny access to the HR schema.<\/li>\n<li>Break the ownership chain, observe the failure, diagnose the cause, and repair it by realigning ownership.<\/li>\n<\/ol>\n<p>All scripts were tested on Azure SQL\u00a0Database and work unchanged on SQL Server.<\/p>\n<h3>1\u2003Set up the objects<\/h3>\n<pre><code>-- Create logical containers\nCREATE SCHEMA HR;\nCREATE SCHEMA SalesReporting;\n\n-- HR table with sensitive data\nCREATE TABLE HR.Employees (\n    EmployeeID INT PRIMARY KEY,\n    FirstName  NVARCHAR(50),\n    LastName   NVARCHAR(50),\n    Department NVARCHAR(50),\n    HireDate   DATE,\n    SSN        CHAR(11),\n    Salary     DECIMAL(10,2)\n);\n\nINSERT INTO HR.Employees VALUES\n(1,'Alice','Smith','Sales','2020-01-15','123-45-6789',75000),\n(2,'Bob','Jones','HR',   '2019-03-10','987-65-4321',85000),\n(3,'Carol','Lee', 'Sales','2021-07-01','111-22-3333',72000);\n\n-- Read\u2011only view for the sales team\nCREATE VIEW SalesReporting.vw_EmployeeSummary\nWITH SCHEMABINDING AS\nSELECT EmployeeID, FirstName, LastName, Department, HireDate\nFROM HR.Employees\nWHERE Department = 'Sales';<\/code><\/pre>\n<h3>2\u2003Create a reporting role and user<\/h3>\n<pre><code>CREATE ROLE SalesTeamRole;\nCREATE USER  SalesUser WITHOUT LOGIN;\nALTER ROLE SalesTeamRole ADD MEMBER SalesUser;\n\nDENY  SELECT ON SCHEMA::HR             TO SalesTeamRole;\nGRANT SELECT ON SCHEMA::SalesReporting TO SalesTeamRole;<\/code><\/pre>\n<p>The role can query anything under <code>SalesReporting<\/code> but is denied direct access to anything in <code>HR<\/code>.<\/p>\n<h3>3\u2003Verify the design<\/h3>\n<pre><code>EXECUTE AS USER = 'SalesUser';\nSELECT * FROM SalesReporting.vw_EmployeeSummary;  -- succeeds\nSELECT * FROM HR.Employees;                       -- fails (Msg\u00a0229)\nREVERT;<\/code><\/pre>\n<p>Because both the view and the table live in schemas owned by <code>dbo<\/code>, SQL\u00a0Server does not re\u2011check permissions on the base table; the deny on <code>HR<\/code> is respected only for direct queries.<\/p>\n<h3>4\u2003Break the ownership chain<\/h3>\n<pre><code>CREATE SCHEMA SalesReporting2 AUTHORIZATION db_owner;\n\nGRANT SELECT ON SCHEMA::SalesReporting2 TO SalesTeamRole;\n\nCREATE VIEW SalesReporting2.vw_EmployeeSummary\nWITH SCHEMABINDING AS\nSELECT EmployeeID, FirstName, LastName, Department, HireDate\nFROM HR.Employees\nWHERE Department = 'Sales';\n\nEXECUTE AS USER = 'SalesUser';\nSELECT * FROM SalesReporting2.vw_EmployeeSummary; -- Msg\u00a0229\nREVERT;<\/code><\/pre>\n<p>Because <code>SalesReporting2<\/code> belongs to <code>db_owner<\/code> while <code>HR<\/code> belongs to <code>dbo<\/code>, the chain is broken and SQL\u00a0Server demands rights on the underlying table. The explicit deny wins and the query fails.<\/p>\n<h3>5\u2003Diagnose with system metadata<\/h3>\n<pre><code>SELECT s.name   AS SchemaName,\n       dp.name  AS Owner\nFROM sys.schemas s\nJOIN sys.database_principals dp ON s.principal_id = dp.principal_id\nWHERE s.name LIKE 'SalesReporting%';\n\nEXECUTE AS USER = 'SalesUser';\nSELECT * FROM fn_my_permissions('SalesReporting2','SCHEMA'); -- only SELECT\nREVERT;<\/code><\/pre>\n<p>Ownership misalignment is now obvious.<\/p>\n<h3>6\u2003Repair the chain and restore access<\/h3>\n<pre><code>ALTER AUTHORIZATION ON SCHEMA::SalesReporting2 TO dbo;\n\n-- Ownership changed; the previous SELECT grant is still valid, so test again\nEXECUTE AS USER = 'SalesUser';\nSELECT * FROM SalesReporting2.vw_EmployeeSummary;  -- now succeeds\nREVERT;<\/code><\/pre>\n<p>Realigning schema ownership re\u2011establishes the chain, and the original deny on <code>HR<\/code> still blocks direct access to the table.<\/p>\n<h3>7\u2003Clean\u2011up script (optional)<\/h3>\n<pre><code>IF USER_NAME() = 'SalesUser' REVERT;\nDROP VIEW   IF EXISTS SalesReporting2.vw_EmployeeSummary;\nDROP VIEW   IF EXISTS SalesReporting.vw_EmployeeSummary;\nDROP TABLE  IF EXISTS HR.Employees;\nDROP USER   IF EXISTS SalesUser;\nDROP ROLE   IF EXISTS SalesTeamRole;\nDROP SCHEMA IF EXISTS SalesReporting2;\nDROP SCHEMA IF EXISTS SalesReporting;\nDROP SCHEMA IF EXISTS HR;<\/code><\/pre>\n<h3>Closing thoughts<\/h3>\n<p>A reporting layer that protects sensitive data hinges on two ideas: grant at the schema level and keep ownership aligned. When a view and its base table share the same owner, SQL\u00a0Server trusts the relationship and skips extra checks, so a deny on the underlying schema does not leak through the view. Change ownership\u2014even unintentionally\u2014and the chain breaks, surfacing permission errors or, worse, exposing data you thought was hidden.<\/p>\n<p>Whenever you add a new schema or move objects, verify ownership, re\u2011test impersonated access, and document the rationale. A few minutes of due diligence ensures that your least\u2011privilege design stays intact as the database evolves.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post demonstrates how to secure reporting views in SQL\u00a0Server by combining schema\u2011level permissions with ownership chaining. You\u2019ll create separate schemas for HR data and reporting, define a role and user, then grant and deny the appropriate permissions. The walkthrough shows how a broken ownership chain leads to permission errors and how to realign schema ownership to restore access. It includes scripts for setup, testing via EXECUTE AS, metadata inspection, and clean\u2011up. By the end, you\u2019ll understand how to expose safe views while protecting sensitive base tables under the least\u2011privilege model.<\/p>\n","protected":false},"author":49,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[101,29,21],"tags":[602,292,608,609,606,603,605,607,604,601],"class_list":["post-1101","post","type-post","status-publish","format-standard","hentry","category-azure","category-security","category-tutorial","tag-azure-sql-db","tag-data-security","tag-database-roles","tag-hr-data-protection","tag-least-privilege","tag-ownership-chaining-2","tag-schema-permissions","tag-schemabinding","tag-secure-views","tag-sql-server-3"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SQL Server Permissions and Ownership Chaining - SQL Table Talk<\/title>\n<meta name=\"description\" content=\"Today&#039;s post demonstrates how to secure reporting views in SQL\u00a0Server by combining schema\u2011level permissions with ownership chaining. You\u2019ll create separate schemas for HR data and reporting, define a role and user, then grant and deny the appropriate permissions. The walkthrough shows how a broken ownership chain leads to permission errors and how to realign schema ownership to restore access. It includes scripts for setup, testing via EXECUTE AS, metadata inspection, and clean\u2011up. By the end, you\u2019ll understand how to expose safe views while protecting sensitive base tables under the least\u2011privilege model.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqltabletalk.com\/?p=1101\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server Permissions and Ownership Chaining - SQL Table Talk\" \/>\n<meta property=\"og:description\" content=\"Today&#039;s post demonstrates how to secure reporting views in SQL\u00a0Server by combining schema\u2011level permissions with ownership chaining. You\u2019ll create separate schemas for HR data and reporting, define a role and user, then grant and deny the appropriate permissions. The walkthrough shows how a broken ownership chain leads to permission errors and how to realign schema ownership to restore access. It includes scripts for setup, testing via EXECUTE AS, metadata inspection, and clean\u2011up. By the end, you\u2019ll understand how to expose safe views while protecting sensitive base tables under the least\u2011privilege model.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqltabletalk.com\/?p=1101\" \/>\n<meta property=\"og:site_name\" content=\"SQL Table Talk\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-25T14:00:00+00:00\" \/>\n<meta name=\"author\" content=\"Jon Russell\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jon Russell\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=1101#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=1101\"},\"author\":{\"name\":\"Jon Russell\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/8f5916388cc3b793a960dea33ff1ed86\"},\"headline\":\"SQL Server Permissions and Ownership Chaining\",\"datePublished\":\"2025-07-25T14:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=1101\"},\"wordCount\":367,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"keywords\":[\"Azure\u00a0SQL\u00a0DB\",\"Data Security\",\"database roles\",\"HR data protection\",\"least privilege\",\"ownership chaining\",\"schema permissions\",\"schemabinding\",\"secure views\",\"SQL\u00a0Server\"],\"articleSection\":[\"Azure\",\"Security\",\"Tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=1101#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=1101\",\"url\":\"https:\/\/www.sqltabletalk.com\/?p=1101\",\"name\":\"SQL Server Permissions and Ownership Chaining - SQL Table Talk\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\"},\"datePublished\":\"2025-07-25T14:00:00+00:00\",\"description\":\"Today's post demonstrates how to secure reporting views in SQL\u00a0Server by combining schema\u2011level permissions with ownership chaining. You\u2019ll create separate schemas for HR data and reporting, define a role and user, then grant and deny the appropriate permissions. The walkthrough shows how a broken ownership chain leads to permission errors and how to realign schema ownership to restore access. It includes scripts for setup, testing via EXECUTE AS, metadata inspection, and clean\u2011up. By the end, you\u2019ll understand how to expose safe views while protecting sensitive base tables under the least\u2011privilege model.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=1101#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=1101\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=1101#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqltabletalk.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server Permissions and Ownership Chaining\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\",\"url\":\"https:\/\/www.sqltabletalk.com\/\",\"name\":\"SQL Table Talk\",\"description\":\"Breaking Down SQL Server, One Post at a Time.\",\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqltabletalk.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\",\"name\":\"Stephen Planck\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"caption\":\"Stephen Planck\"},\"logo\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/dexterwiki.com\",\"https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI\",\"https:\/\/www.youtube.com\/linuxmate\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/8f5916388cc3b793a960dea33ff1ed86\",\"name\":\"Jon Russell\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f35049bc3903cae9c596247b2dfe95c0d9b003dd0c758b9690cc00544216aa7c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f35049bc3903cae9c596247b2dfe95c0d9b003dd0c758b9690cc00544216aa7c?s=96&d=mm&r=g\",\"caption\":\"Jon Russell\"},\"url\":\"https:\/\/www.sqltabletalk.com\/?author=49\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL Server Permissions and Ownership Chaining - SQL Table Talk","description":"Today's post demonstrates how to secure reporting views in SQL\u00a0Server by combining schema\u2011level permissions with ownership chaining. You\u2019ll create separate schemas for HR data and reporting, define a role and user, then grant and deny the appropriate permissions. The walkthrough shows how a broken ownership chain leads to permission errors and how to realign schema ownership to restore access. It includes scripts for setup, testing via EXECUTE AS, metadata inspection, and clean\u2011up. By the end, you\u2019ll understand how to expose safe views while protecting sensitive base tables under the least\u2011privilege model.","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:\/\/www.sqltabletalk.com\/?p=1101","og_locale":"en_US","og_type":"article","og_title":"SQL Server Permissions and Ownership Chaining - SQL Table Talk","og_description":"Today's post demonstrates how to secure reporting views in SQL\u00a0Server by combining schema\u2011level permissions with ownership chaining. You\u2019ll create separate schemas for HR data and reporting, define a role and user, then grant and deny the appropriate permissions. The walkthrough shows how a broken ownership chain leads to permission errors and how to realign schema ownership to restore access. It includes scripts for setup, testing via EXECUTE AS, metadata inspection, and clean\u2011up. By the end, you\u2019ll understand how to expose safe views while protecting sensitive base tables under the least\u2011privilege model.","og_url":"https:\/\/www.sqltabletalk.com\/?p=1101","og_site_name":"SQL Table Talk","article_published_time":"2025-07-25T14:00:00+00:00","author":"Jon Russell","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jon Russell","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqltabletalk.com\/?p=1101#article","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/?p=1101"},"author":{"name":"Jon Russell","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/8f5916388cc3b793a960dea33ff1ed86"},"headline":"SQL Server Permissions and Ownership Chaining","datePublished":"2025-07-25T14:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqltabletalk.com\/?p=1101"},"wordCount":367,"commentCount":0,"publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"keywords":["Azure\u00a0SQL\u00a0DB","Data Security","database roles","HR data protection","least privilege","ownership chaining","schema permissions","schemabinding","secure views","SQL\u00a0Server"],"articleSection":["Azure","Security","Tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqltabletalk.com\/?p=1101#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqltabletalk.com\/?p=1101","url":"https:\/\/www.sqltabletalk.com\/?p=1101","name":"SQL Server Permissions and Ownership Chaining - SQL Table Talk","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/#website"},"datePublished":"2025-07-25T14:00:00+00:00","description":"Today's post demonstrates how to secure reporting views in SQL\u00a0Server by combining schema\u2011level permissions with ownership chaining. You\u2019ll create separate schemas for HR data and reporting, define a role and user, then grant and deny the appropriate permissions. The walkthrough shows how a broken ownership chain leads to permission errors and how to realign schema ownership to restore access. It includes scripts for setup, testing via EXECUTE AS, metadata inspection, and clean\u2011up. By the end, you\u2019ll understand how to expose safe views while protecting sensitive base tables under the least\u2011privilege model.","breadcrumb":{"@id":"https:\/\/www.sqltabletalk.com\/?p=1101#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqltabletalk.com\/?p=1101"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqltabletalk.com\/?p=1101#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqltabletalk.com\/"},{"@type":"ListItem","position":2,"name":"SQL Server Permissions and Ownership Chaining"}]},{"@type":"WebSite","@id":"https:\/\/www.sqltabletalk.com\/#website","url":"https:\/\/www.sqltabletalk.com\/","name":"SQL Table Talk","description":"Breaking Down SQL Server, One Post at a Time.","publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqltabletalk.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0","name":"Stephen Planck","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","caption":"Stephen Planck"},"logo":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/dexterwiki.com","https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI","https:\/\/www.youtube.com\/linuxmate"]},{"@type":"Person","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/8f5916388cc3b793a960dea33ff1ed86","name":"Jon Russell","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f35049bc3903cae9c596247b2dfe95c0d9b003dd0c758b9690cc00544216aa7c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f35049bc3903cae9c596247b2dfe95c0d9b003dd0c758b9690cc00544216aa7c?s=96&d=mm&r=g","caption":"Jon Russell"},"url":"https:\/\/www.sqltabletalk.com\/?author=49"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/1101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1101"}],"version-history":[{"count":16,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/1101\/revisions"}],"predecessor-version":[{"id":1149,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/1101\/revisions\/1149"}],"wp:attachment":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}