Skip to Content.
Sympa Menu

freetds - [freetds] OT: sp_rename broken for non-dbo on Microsoft servers

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "Lowden, James K" <LowdenJK AT bernstein.com>
  • To: "TDS Development Group" <freetds AT lists.ibiblio.org>
  • Subject: [freetds] OT: sp_rename broken for non-dbo on Microsoft servers
  • Date: Wed, 21 Apr 2004 16:42:07 -0400

I'd like to start a rumor or confirm one.

On our SQL Server 7.0 box, users can create their own tables. If I create a
table:

create table a (a int)

when logged in as me, it creates an object "[dbname].LowdenJK.a". Fine and
good. Then, I try to rename the column:

sp_rename 'LowdenJK.a.a', b

Whatever form of sp_rename I use, I get the error:

Msg 15334, Level 11, State 1, Server NTS0198, Procedure sp_rename, Line 300
Error: Only members of the sysadmin role or the database owner can rename
items they do not own.

even though it's completely absolutely clear I in fact do own that object.

The culprit appears to be line 310 of sp_rename, near the bottom, where we
find:

if (@objtype = 'userdatatype')
select @ownerid = uid from systypes where xusertype = @xusertype
else
select @ownerid = ObjectProperty(@objid, 'ownerid')
if ( (not (1 = is_member('db_owner')))
AND (not (1 = is_member('db_ddladmin')))
AND (not (1 = is_member(user_name(@ownerid)))) )
begin
raiserror(15334,-1,-1)
return 1
end

The proc gets the ower of the datatype or object, as required. It then
attempts to decide if the owner is eligible to rename the thing. It checks
if the user belongs to db_owner or db_ddladmin, which is fine. The final
check, though is just bogus. From the documentation, this is an incorrect
use of is_member, whose parameter takes either a role or a group. A user is
not a role or a group, afaik.

I think the right final test is:

AND @ownerid <> user_id()

I tested this on our server and it seems to work. Anyone else care to try to
reproduce the error, confirm the bug or the fix? I'd be much obliged. :-)

--jkl


-----------------------------------------
The information contained in this transmission may contain privileged and
confidential information and is intended only for the use of the person(s)
named above. If you are not the intended recipient, or an employee or agent
responsible for delivering this message to the intended recipient, any
review, dissemination, distribution or duplication of this communication is
strictly prohibited. If you are not the intended recipient, please contact
the sender immediately by reply e-mail and destroy all copies of the original
message. Please note that we do not accept account orders and/or instructions
by e-mail, and therefore will not be responsible for carrying out such orders
and/or instructions.
If you, as the intended recipient of this message, the purpose of which is to
inform and update our clients, prospects and consultants of developments
relating to our services and products, would not like to receive further
e-mail correspondence from the sender, please "reply" to the sender
indicating your wishes. In the U.S.: 1345 Avenue of the Americas, New York,
NY 10105.





  • [freetds] OT: sp_rename broken for non-dbo on Microsoft servers, Lowden, James K, 04/21/2004

Archive powered by MHonArc 2.6.24.

Top of Page