正式服务器中,为了安全、互不干扰,会给个DB库分配不同的账号,A库有AReadAReadWriteAOwn账号,B库有BReadBReadWriteBOwn账号。需要配置出来,甚至还能限制AReadUserTable只能对A库的User表读取权限。
以下操作有问题、不能完整实现需求!我抽空改
有UI操作和代码命令行操作2种。
需要区分好:账号、数据库角色、数据库用户等概念(参考https://www.cnblogs.com/xwdreamer/archive/2012/06/25/2562828.html 的解释):
UI:https://www.cnblogs.com/yxyht/archive/2013/03/22/2975880.html (建议将《强制实施密码策略》及其下2个选项去除勾选)。
代码:https://www.cnblogs.com/xwdreamer/archive/2012/06/25/2562828.html
1 --创建登陆帐户(create login) 2 CREATE LOGIN CommonAuthoritySystem_Read WITH PASSWORD='123456', DEFAULT_DATABASE=CommonAuthoritySystem 3 4 --为登陆账户创建数据库用户(create user),在mydb数据库中的security中的user下可以找到新创建的CommonAuthoritySystem_Read 5 CREATE USER CommonAuthoritySystem_Read FOR LOGIN CommonAuthoritySystem_Read WITH DEFAULT_SCHEMA=dbo 6 7 --通过加入数据库角色,赋予数据库用户“db_owner”权限 8 ----db_owner,db_datareader,db_datawriter 9 EXEC sp_addrolemember 'db_datareader', 'CommonAuthoritySystem_Read'
注意:若要限制表,需要到数据库——表 属性那边去限制
真心感到:虽然windows可视化配置简单易学,但大规模运维如果还是点点弄弄,效率太低、容易出错、容易忘记,不如命令行封装成参数方法,用时只要执行就行。快速!
所以linux多搞搞,还是很高效的,深感linux、mysql的精神强大。
登陆帐户名为:“dba”,登陆密码:abcd1234@”,默认连接到的数据库:“mydb”。 这时候,dba 帐户就可以连接到 SQL Server 服务器上了。但是此时还不能 访问数据库中的对象(严格的说,此时 dba 帐户默认是 guest 数据库用户身份, 可以访问 guest 能够访问的数据库对象)。
要使 dba 帐户能够在 mydb 数据库中访问自己需要的对象, 需要在数据库 mydb 中建立一个“数据库用户”,赋予这个“数据库用户” 某些访问权限,并且把登陆帐户“dba” 和这个“数据库用户” 映射起来。 习惯上,“数据库用户” 的名字和 “登陆帐户”的名字相同,即:“dba”。 创建“数据库用户”和建立映射关系只需要一步即可完成:
2. 创建数据库用户(create user):
--为登陆账户创建数据库用户(create user),在mydb数据库中的security中的user下可以找到新创建的dba
create user dba for login dba with default_schema=dbo
并指定数据库用户“dba” 的默认 schema 是“dbo”。这意味着 用户“dba” 在执行“select * from t”,实际上执行的是 “select * from dbo.t”。
3. 通过加入数据库角色,赋予数据库用户“dba”权限:
--通过加入数据库角色,赋予数据库用户“db_owner”权限
exec sp_addrolemember 'db_owner', 'dba'
此时,dba 就可以全权管理数据库 mydb 中的对象了。