{"id":286,"date":"2013-02-19T10:27:20","date_gmt":"2013-02-19T09:27:20","guid":{"rendered":"http:\/\/blog.systemconnect.dk\/?p=286"},"modified":"2015-04-25T14:01:55","modified_gmt":"2015-04-25T12:01:55","slug":"skema-mig-her-og-skema-mig-der","status":"publish","type":"post","link":"https:\/\/scblog.lynge.org\/?p=286","title":{"rendered":"Skema mig her og skema mig der!"},"content":{"rendered":"<p>N\u00e5r man k\u00f8rer C5 p\u00e5 SQL er det relativt vigtigt hvordan rettighederne ops\u00e6ttes &#8211; og is\u00e6r hvilket skema den enkelte tilg\u00e5r databasen med &#8211; i hvert fald hvis der \u00e6ndres i tabeldefinitioner.<\/p>\n<p>Problemet er at C5 foruds\u00e6tter at man har rettigheder til de p\u00e5g\u00e6ldende tabeller (helst dbo=database owner) og selv om man kan tilg\u00e5 SQL-databasen med et andet skemanavn, s\u00e5 g\u00e5r det galt hvis man skriver tabeldefinitioner. S\u00e5 f\u00e5r de nemlig skemanavnet som de skrives med &#8211; og s\u00e5 har de andre brugere formentligt ikke adgang til dem.<\/p>\n<p>Dvs. typisk vil man opleve denne fejl som at C5 viser en SQL-fejl om at man ikke har rettigheder til at tilg\u00e5 tabellen og man kan s\u00e5 se i SQL manageren at tabellen har forkert skema.<\/p>\n<p>Man kan i \u00f8vrigt ikke bare synkronisere C5s tabeller\u00a0med SQL&#8217;en v.hj.a. synkroniseringsk\u00f8rslen i udviklingsmenuen &#8211; for den &#8220;forkerte&#8221; tabel indeholder jo alle data (s\u00e5 skal man da i hvert fald flytte den bagefter!).<\/p>\n<p>Den letteste l\u00f8sning er naturligvis at man fra starten af\u00a0ops\u00e6tter brugerne s\u00e5 de tilg\u00e5r tabeller med et f\u00e6lles korrekt skema &#8211; s\u00e5 g\u00e5r det aldrig galt.<\/p>\n<p>Er det g\u00e5et galt &#8211; dvs. man pludselig har en tabel med et andet skemanavn, hvori alle data ligger men som kun enkelte brugere har adgang til &#8211; s\u00e5 kan man heldigvis skifte skema p\u00e5 tabellerne direkte p\u00e5 SQL-serveren.<\/p>\n<p>En enkelt table skiftes s\u00e5ledes:<\/p>\n<pre>ALTER SCHEMA [&lt;nyt skema \u2013 typisk dbo eller C5Supervisor&gt;] TRANSFER [&lt;gammelt skema&gt;].[&lt;tabelnavn&gt;];\r\n\r\n<\/pre>\n<p>Er det g\u00e5et helt galt og man gerne vil have skiftet alle skemaer p\u00e5 alle tabeller, s\u00e5 kan det ogs\u00e5 arrangeres:<\/p>\n<pre>DECLARE tabcurs CURSOR FOR\r\n  SELECT '<strong>&lt;gammelt skema&gt;<\/strong>.' + [name]\r\n \u00a0  FROM sysobjects\r\n \u00a0\u00a0\u00a0WHERE xtype = 'u'\r\n  OPEN tabcurs\r\n  DECLARE @tname NVARCHAR(517)\r\n  FETCH NEXT FROM tabcurs INTO @tname\r\n  WHILE @@fetch_status = 0\r\n  BEGIN\r\n \u00a0\u00a0 EXEC sp_changeobjectowner @tname, '<strong>&lt;nyt skema \u2013 typisk dbo eller C5Supervisor&gt;<\/strong>'\r\n \u00a0\u00a0 FETCH NEXT FROM tabcurs INTO @tname\r\n  END\r\n  CLOSE tabcurs\r\n  DEALLOCATE tabcurs\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>N\u00e5r man k\u00f8rer C5 p\u00e5 SQL er det relativt vigtigt hvordan rettighederne ops\u00e6ttes &#8211; og is\u00e6r hvilket skema den enkelte tilg\u00e5r databasen med &#8211; i hvert fald hvis der \u00e6ndres i tabeldefinitioner. Problemet er at C5 foruds\u00e6tter at man har &hellip; <a href=\"https:\/\/scblog.lynge.org\/?p=286\">L\u00e6s resten <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37,6,4],"tags":[15,43,13,22,11,23,53,14,28],"class_list":["post-286","post","type-post","status-publish","format-standard","hentry","category-klassisk-c5","category-klassisk-c5-support","category-klassisk-c5-teknik","tag-business-solutions","tag-c5","tag-damgaard-data","tag-database","tag-dynamics","tag-hint","tag-klassisk-c5","tag-microsoft","tag-sql"],"_links":{"self":[{"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/posts\/286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=286"}],"version-history":[{"count":5,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/posts\/286\/revisions"}],"predecessor-version":[{"id":733,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=\/wp\/v2\/posts\/286\/revisions\/733"}],"wp:attachment":[{"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scblog.lynge.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}