<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'Documentation', 'SET IDENTITY_INSERT', and 'Connect'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=Documentation,SET+IDENTITY_INSERT,Connect&amp;orTags=0</link><description>Search results matching tags 'Documentation', 'SET IDENTITY_INSERT', and 'Connect'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>What permissions are required for SET IDENTITY_INSERT ON?</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/14/what-permissions-are-required-for-set-identity-insert-on.aspx</link><pubDate>Tue, 14 Dec 2010 17:48:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:31635</guid><dc:creator>AaronBertrand</dc:creator><description>
&lt;p&gt;&lt;span&gt;SQL Server 2000's &lt;a href="http://msdn.microsoft.com/en-us/library/aa259221%28SQL.80%29.aspx" target="_blank"&gt;SET IDENTITY_INSERT ON topic&lt;/a&gt; says:&lt;/span&gt;&lt;/p&gt;


&lt;blockquote&gt;
&lt;table bgcolor="#ffffdd" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;background:none repeat scroll 0% 0% transparent;font-size:13px;font-family:georgia,times new roman,times;-moz-background-inline-policy:continuous;"&gt;&lt;i&gt;
Execute permissions default to the sysadmin fixed server role, and the db_owner and db_ddladmin fixed database roles, and the object owner.
&lt;/i&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;span&gt;While the &lt;a href="http://msdn.microsoft.com/en-us/library/ms188059%28SQL.90%29.aspx" target="_blank"&gt;SET IDENTITY_INSERT topic&lt;/a&gt; for SQL Server 2005 (and up) says:&lt;/span&gt;&lt;/p&gt;


&lt;blockquote&gt;
&lt;table bgcolor="#ffffdd" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;background:none repeat scroll 0% 0% transparent;font-size:13px;font-family:georgia,times new roman,times;-moz-background-inline-policy:continuous;"&gt;&lt;i&gt;User must own the object, or be a member of the sysadmin fixed 
server role, or the db_owner and db_ddladmin fixed database roles.
&lt;/i&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;This was clearly adapted from the 2000 books online and re-written by someone who misinterpreted "db_owner and db_ddladmin" as a collective requirement, when it is not. It also missed the fact that ALTER TABLE permissions are sufficient even for a user not in any of the roles mentioned. In fact, I would suggest that explicitly granting ALTER is the safest way to allow a specific user to change the SET IDENTITY_INSERT settings for a table (while it does allow other types of ALTER commands, it grants far less than db_ddladmin and obviously less than db_owner).&amp;nbsp; Anyway, let's run a quick test to prove that the current Books Online statement is not accurate:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;USE&lt;/font&gt; [master]&lt;font color="gray"&gt;;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;
&lt;br&gt;&lt;font color="green"&gt;-- add a ddladmin login&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;EXEC&lt;/font&gt; &lt;font color="green"&gt;sys&lt;/font&gt;.&lt;font color="maroon"&gt;sp_addlogin&lt;/font&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @loginame = &lt;font color="red"&gt;N'test_ddladmin'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @passwd   = &lt;font color="red"&gt;N'foo'&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="green"&gt;-- add a no-role login&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;EXEC&lt;/font&gt; &lt;font color="green"&gt;sys&lt;/font&gt;.&lt;font color="maroon"&gt;sp_addlogin&lt;/font&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @loginame = &lt;font color="red"&gt;N'test_peon'&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @passwd   = &lt;font color="red"&gt;N'foo'&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;br&gt;CREATE DATABASE &lt;/font&gt;set_test&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;br&gt;USE&lt;/font&gt; set_test&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="green"&gt;-- add a ddladmin user&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;EXEC&lt;/font&gt; &lt;font color="green"&gt;sys&lt;/font&gt;.&lt;font color="maroon"&gt;sp_adduser&lt;/font&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @loginame   = &lt;font color="red"&gt;N'test_ddladmin'&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @name_in_db = &lt;font color="red"&gt;N'test_ddladmin'&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @grpname    = &lt;font color="red"&gt;N'db_ddladmin'&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="green"&gt;-- add a no-role user&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;EXEC&lt;/font&gt; &lt;font color="green"&gt;sys&lt;/font&gt;.&lt;font color="maroon"&gt;sp_adduser&lt;/font&gt;  &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @loginame   = &lt;font color="red"&gt;N'test_peon'&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @name_in_db = &lt;font color="red"&gt;N'test_peon'&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;br&gt;CREATE TABLE &lt;/font&gt;dbo.IdentityTable&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;id &lt;font&gt;&lt;font color="blue"&gt;INT IDENTITY&lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;1,1&lt;font&gt;&lt;font color="gray"&gt;));&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="green"&gt;-- give the ddladmin user explicit INSERT/SELECT:&lt;/font&gt;&lt;br&gt;&lt;font&gt;&lt;font color="blue"&gt;GRANT INSERT&lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;/font&gt; &lt;font&gt;&lt;font color="blue"&gt;SELECT ON&lt;/font&gt;&lt;/font&gt; dbo.IdentityTable &lt;font&gt;&lt;font color="blue"&gt;TO&lt;/font&gt;&lt;/font&gt; test_ddladmin&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="green"&gt;-- give the non-ddladmin user INSERT/SELECT as well as ALTER:&lt;/font&gt;&lt;br&gt;&lt;font&gt;&lt;font color="blue"&gt;GRANT ALTER&lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;/font&gt; &lt;font&gt;&lt;font color="blue"&gt;INSERT&lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;/font&gt; &lt;font&gt;&lt;font color="blue"&gt;SELECT ON&lt;/font&gt;&lt;/font&gt; dbo.IdentityTable &lt;font&gt;&lt;font color="blue"&gt;TO&lt;/font&gt;&lt;/font&gt; test_peon&lt;font&gt;&lt;font color="gray"&gt;;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, connect to the server as either test_peon or test_ddladmin and run this code: &lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font&gt;&lt;font color="blue"&gt;SET IDENTITY_INSERT &lt;/font&gt;&lt;/font&gt;dbo.IdentityTable &lt;font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;font&gt;&lt;font color="blue"&gt;INSERT&lt;/font&gt;&lt;/font&gt; dbo.IdentityTable&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;id&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font color="gray"&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; &lt;font&gt;&lt;font color="blue"&gt;SELECT&lt;/font&gt;&lt;/font&gt; 1&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;font&gt;&lt;font color="blue"&gt;SET IDENTITY_INSERT&lt;/font&gt;&lt;/font&gt; dbo.IdentityTable &lt;font&gt;&lt;font color="blue"&gt;OFF&lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;font&gt;&lt;font color="blue"&gt;SELECT&lt;/font&gt;&lt;/font&gt; id &lt;font&gt;&lt;font color="blue"&gt;FROM&lt;/font&gt;&lt;/font&gt; dbo.IdentityTable&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt; &lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;


&lt;p&gt;Obviously this works fine, without being in both the db_ddladmin and db_owner fixed roles, and even with the correct permissions in spite of not belonging to either role.&amp;nbsp; I filed a documentation bug about this, in the hopes that they make Books Online slightly clearer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://connect.microsoft.com/SQLServer/feedback/details/631169" title="http://connect.microsoft.com/SQLServer/feedback/details/631169" target="_blank"&gt;http://connect.microsoft.com/SQLServer/feedback/details/631169&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't forget to clean up:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font&gt;&lt;font color="blue"&gt;USE&lt;/font&gt;&lt;/font&gt; [master]&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;font&gt;&lt;font color="blue"&gt;ALTER DATABASE&lt;/font&gt;&lt;/font&gt; set_test &lt;font&gt;&lt;font color="blue"&gt;SET SINGLE_USER WITH ROLLBACK IMMEDIATE&lt;/font&gt;&lt;/font&gt;&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;font&gt;&lt;font color="blue"&gt;DROP DATABASE&lt;/font&gt;&lt;/font&gt; set_test&lt;font&gt;&lt;font color="gray"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;GO&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>