我创建了一个登录名:bob
我授予他使用sp_addsrvrolemember 'dbcreator'
这会自动在登录bob下创建一个用户,&与登录名同名。
Login - bob
user- bob
是否在master数据库中创建了用户?
我执行了此查询:select * from sysusers
,但我在表格中找不到任何名为'bob'
的用户。为什么这样?
'bob'有权创建数据库。
现在我想授予他创建表的权限。那我该怎么做? 当我使用grant进行它时,它说无法找到用户'bob'?为什么这样?
grant create table to bob
之后,我连接sql server并登录'bob' 然后,我创建了一个数据库:bobdb 我进入了bobdb。 现在,如何在bobdb中为bob赋予create table权限
我是否需要添加新用户?
答案 0 :(得分:5)
登录位于服务器级别 - 您在服务器上登录。
用户处于数据库级别 - 您可以在每个单独的数据库中为单个登录定义不同的用户。
在运行create user .... statement ...
时,在当前处于活动状态的数据库中创建用户因此,如果您在运行该查询时位于SSMS中的master
数据库中 - 是的,那么该用户是在master
数据库中创建的,并且在其他任何地方都不存在......
答案 1 :(得分:2)
以您自己的身份连接到任何数据库...
CREATE LOGIN Bob WITH PASSWORD='<the password>';
这会创建一个服务器级登录,它只有作为访客用户连接到任何数据库的权限。现在将登录添加到服务器级 dbcreator角色,并以 Bob 身份连接到服务器。
问题CREATE DATABASE,你仍然只有名为 Bob 的登录。 登录将拥有数据库,您可以通过运行此命令来验证...
SELECT sp.name AS LoginName, dp.name AS UserName
FROM bobdb.sys.database_principals AS dp
INNER JOIN sys.server_principals AS sp ON dp.sid = sp.sid
WHERE sp.name = 'Bob'
;
由于Bob login 拥有数据库,因此他应该能够为该数据库运行大多数DDL命令。如果登录拥有数据库,则该登录可以在该数据库内部执行任何操作,包括创建表。
明确向用户授予权限bobdb中的Bob适用于更改数据库所有者( ALTER AUTHORIZATION ON DATABASE :: bobdb TO LoginNameOfNewOwner )以外的帐户。然后可以将Bob添加为名为Bob的用户,然后仅授予该用户所需的最低权限。
有关详细信息,请参阅 db_owner in Books Online
上与页面相关的部分此外,在SQL 2000之后不推荐使用sysusers。请参阅 new system catalog views 。
最后,K。Brian Kelly在SSC网站上发布了 login/user mapping 的摘要。