[자습노트] SQL Server에서 사용자 역할 및 권한 생성(SQL 문 사용) 업데이트 2023.07.06

--<在SQL Server中创建用户角色及授权(使用SQL语句)>更新2023.07.06
--1. 首先在 SQL Server 服务器级别,创建登陆帐户(create login)
--2. 创建数据库用户(create user):
--3. 通过加入数据库角色,赋予数据库用户“dba”权限:

--创建登陆帐户(create login)
create login dba with password='abcd1234@', default_database=AliSysDB
--这时候,dba 帐户就可以连接到 SQL Server 服务器上了。但是此时还不能 访问数据库中的对象
--(严格的说,此时 dba 帐户默认是 guest 数据库用户身份, 可以访问 guest 能够访问的数据库对象)。
--要使 dba 帐户能够在 AliSysDB 数据库中访问自己需要的对象, 需要在数据库 AliSysDB 中建立一个“数据库用户”,
--赋予这个“数据库用户” 某些访问权限,并且把登陆帐户“dba” 和这个“数据库用户” 映射起来。
--创建“数据库用户”和建立映射关系只需要一步即可完成

--为登陆账户创建数据库用户(create user),在AliSysDB数据库中的security中的user下可以找到新创建的dba
create user dba for login dba with default_schema=dbo
--通过加入数据库角色,赋予数据库用户“db_owner”权限
exec sp_addrolemember 'db_owner', 'dba'

----让 SQL Server 登陆帐户“dba”访问多个数据库
use DBErp
create user dba for login dba with default_schema=dbo
exec sp_addrolemember 'db_owner', 'dba'


-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

--删除数据库用户:
drop user dba

--删除 SQL Server登陆帐户:
drop login dba



--禁用登陆帐户
alter login dba disable
--启用登陆帐户
alter login dba enable

--登陆帐户改名
alter login dba with name=dba_tom
--登陆帐户改密码:
alter login dba with password='aabb@ccdd'

--数据库用户改名:
alter user dba with name=dba_tom
--更改数据库用户 defult_schema:
alter user dba with default_schema=sales

--使用T-SQL创建用户
--添加角色
use AliSysDB
go
sp_addlogin  'test_db','123456','AliSysDB' 
go
sp_addsrvrolemember   'test_db','sysadmin'   
go
sp_adduser 'test_db','test_db','db_owner'
go  

--使用存储过程来完成用户创建
--下面一个实例来说明在sqlserver中如何使用存储过程创建角色,重建登录,以及如何为登录授权等问题



USE DBErp
 
--创建角色 r_test
EXEC sp_addrole 'r_test'
--添加登录 l_test,设置密码为pwd,默认数据库为pubs
EXEC sp_addlogin 'l_test','a@cd123','DBErp'

--为登录 l_test 在数据库 pubs 中添加安全账户 u_test
EXEC sp_grantdbaccess 'l_test','u_test'

--添加 u_test 为角色 r_test 的成员
EXEC sp_addrolemember 'r_test','u_test'

--授予角色 r_test 对 效期查询 表的所有权限
GRANT ALL ON 效期查询 TO r_test
--ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。

--如果要收回权限,可以使用如下语句。(可选择执行)
revoke all on 效期查询 from r_test

--授予角色 r_test 对 实时库存查询 表的 SELECT 权限
GRANT SELECT ON 实时库存查询 TO r_test


--用l_test登陆,发现可以查询Sales.Orders和实时库存查询两张表
select * from 效期查询
select * from 实时库存查询

--拒绝安全账户 u_test 对 效期查询 表的 SELECT 权限
DENY SELECT ON 效期查询 TO u_test

--重新授权
GRANT SELECT ON 效期查询 TO u_test


--从数据库中删除安全账户,failed
EXEC sp_revokedbaccess 'u_test'

--删除角色 r_test,failed
EXEC sp_droprole 'r_test'

--删除登录 l_test,success
EXEC sp_droplogin 'l_test'



--revoke 与 deny的区别
--revoke:收回之前被授予的权限
--deny:拒绝给当前数据库内的安全帐户授予权限并防止安全帐户通过其组或角色成员资格继承权限。比如UserA所在的角色组有inset权限,但是我们Deny UserA使其没有insert权限,那么以后即使UserA再怎么到其他含有Insert的角色组中去,还是没有insert权限,除非该用户被显示授权。
--简单来说,deny就是将来都不许给,revoke就是收回已经给予的。



GRANT INSERT ON TableA TO RoleA
GO
EXEC sp_addrolemember RoleA, 'UserA' -- 用户UserA将有TableA的INSERT权限
GO
 
REVOKE INSERT ON TableA FROM RoleA -- 用户UserA将没有TableA的INSERT权限,收回权限
GO
 
GRANT INSERT ON TableA TORoleA --重新给RoleA以TableA的INSERT权限
GO 
 
DENY INSERT ON TableA TO UserA -- 虽然用户UserA所在RoleA有TableA的INSERT权限,但UserA本身被DENY了,所以用户UserA将没有TableA的INSERT权限。





SSMS 데이터베이스 관리 도구를 사용하여 사용자 로그인을 생성하는 이 시각적 작업은 SQL 문을 사용하여 생성하는 것보다 훨씬 간단합니다.

1. 사용자 생성

보안 → 로그인 이름(오른쪽 클릭) → 새 로그인 이름에서 데이터베이스에 로그인합니다.

팝업되는 새 로그인 이름 창의 "일반"에서 로그인 이름과 암호를 입력합니다. 암호는 더 복잡하게 설정해야 하며, 그렇지 않으면 오류가 보고됩니다. 간단한 암호를 설정 하려면 "비밀번호 정책 시행" √. .

2. 관리자 권한 설정

왼쪽의 선택 페이지에서 "서버 역할"을 클릭하여 새로 생성된 사용자에게 권한을 부여합니다. 오른쪽의 서버 역할 패널에서 공개를 체크합니다.

참고: 생성된 계정이 시스템 관리자의 권한을 가질 필요가 없다면 sysadmin 항목을 체크하지 마세요!

서버 역할 설명
sysadmin은 SQL Server에서 모든 작업을 수행합니다.
serveradmin은 서버 설정을 구성합니다.
setupadmin은 복제를 설치하고 확장 프로세스를 관리합니다.
securityadmin은 로그인 및 CREATE DATABASE 권한을 관리하고 감사 프로세스를 읽습니다
.admin은 SQL Server 프로세스를 관리합니다.
dbcreator는 데이터베이스를 만들고 수정합니다.
diskadmin은 디스크 파일을 관리합니다.

3. 비관리자 권한 설정

왼쪽 선택 페이지에서 "User Mapping"을 클릭하고 사용자가 로그인할 수 있는 데이터베이스를 선택한 후 해당 사용자가 데이터베이스에 로그인할 수 있는 권한을 선택합니다. 그리고 패널 아래 [Database Role Membership]에서 db_owner 항목을 확인해보세요!

참고: 데이터베이스 관리를 위해 시스템 관리 권한이 없는 계정을 할당할 경우 db_owner 항목을 확인해야 합니다! 그렇지 않으면 계정이 데이터베이스의 데이터 테이블을 볼 수 없습니다!

새로 생성된 사용자 dba에게 여러 데이터베이스에 대한 권한을 부여한
다음 이전 단계를 계속하고 다른 데이터베이스를 클릭한 다음 아래에서 해당 권한을 확인하십시오. 이러한 방식으로 사용자는 한 번에 여러 데이터베이스에 대해 서로 다른 권한을 부여받을 수 있습니다.

'db_owner' -- 데이터베이스 권한 삭제를 포함하여 데이터베이스의 모든 권한을 가집니다.
'db_accessadmin' -- 데이터베이스 사용자에게 다른 데이터베이스 사용자를 생성할 수 있는 권한만 부여하지만 로그인 사용자를 생성할 수 있는 권한은 없습니다.
'db_securityadmin' -- 전체 권한, 개체 소유권, 역할 및 역할 구성원을 관리할 수 있음
'db_ddladmin' -- 모든 DDL(Create, Alter 및 Drop)을 실행할 수 있지만 GRANT, REVOKE 또는 DENY 문을 실행할 수 없음
'db_backupoperator' -- 허용 권한 데이터베이스 백업 및 복원 [백업 및 복원은 sql sever management studio를 통해서도 가능]
'db_datareader' -- 데이터베이스
'db_datawriter'의 모든 사용자 테이블의 모든 데이터를 선택할 수 있음 - 데이터베이스의 모든 사용자 테이블을 변경할 수 있음 'db_denydatareader' 의 모든 데이터
-- 'db_denydatawriter' 데이터베이스의 모든 사용자 테이블에 있는 데이터를 쿼리할 수 없음
-- 데이터베이스의 모든 사용자 테이블에 있는 데이터를 변경할 수 없음
 

4. 왼쪽 선택 페이지에서 "보안 개체"를 클릭하고 보안 개체를 선택한 다음 권한을 부여합니다.

4. [상태]를 입력하여 연결 엔진 인증을 설정합니다.

마지막으로 "상태"를 클릭하고 데이터베이스 엔진에 대한 연결을 부여하고 로그인 이름을 활성화한 다음 마지막으로 확인을 클릭합니다.

로그인이 되지 않는 경우
데이터베이스 속성 페이지의 [보안]에서 SQL Server 및 Windows 인증 모드가 활성화되어 있는지 확인하십시오.

추천

출처blog.csdn.net/zgscwxd/article/details/131586286