{"id":3332,"date":"2017-04-24T11:30:54","date_gmt":"2017-04-24T18:30:54","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3332"},"modified":"2025-06-13T19:29:03","modified_gmt":"2025-06-14T02:29:03","slug":"authentication-authorization-rbac-part-2","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/","title":{"rendered":"Authorization &amp; Authentication with RBAC (Part 2)"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Authorization and authentication are important to Couchbase. In March, <a href=\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac\/\">I blogged about some of the new Role Based Access Control (RBAC)<\/a> that we are showing in the Couchbase Server 5.0 Developer Builds. This month, I\u2019d like to go into a little more detail now that the <a href=\"https:\/\/www.couchbase.com\/downloads\/\">April Couchbase Server 5.0 Developer Build is available<\/a> (make sure to click the &#8220;Developer&#8221; tab).<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_authentication_and_authorization\">Authentication and authorization<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>In past version of Couchbase, buckets were secured by a password. In 5.0, bucket passwords for authorization are gone. You can no longer create a &#8220;bucket password&#8221; for authorization. Instead, you must create one (or more) users that have varying levels of authorization for that bucket. Notice that there is no &#8220;password&#8221; field anymore (not even in the &#8220;Advance bucket settings&#8221;:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06601-create-new-bucket-no-password-for-authentication.png\" alt=\"Create a new Couchbase bucket - no password for authorization\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>So now, you no longer have to hand out a password that gives complete access to a bucket. You can fine-tune bucket authorization, and give out multiple sets of credentials with varying levels of access. This will help you tighten up security, and reduce your exposure.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Note: The administrator user still exists, and has permission to do everything. So I can still run N1QL queries (for instance) on that bucket while logged in as an administrator account. However, this is not the account you should be using from your clients.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_creating_an_authorized_user\">Creating an authorized user<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>To create a new user, you must be logged in as an administrator (or as a user that has an Admin role). Go to the &#8220;Security&#8221; tab, and you\u2019ll be able to see a list of users, and be able to add new ones.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Create a new user by clicking &#8220;ADD USER&#8221;. Enter the information for the user. You may want to create a user for a person (e.g. &#8220;Matt&#8221;), or you may want to create a user for a service (e.g. &#8220;MyAspNetApplication&#8221;). Make sure to enter a strong password, and then select the appropriate roles for the user you want to create.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>For example, let\u2019s create a user &#8220;Matt&#8221; that only has access to run <code>SELECT<\/code> queries on the bucket I just created. In &#8220;Roles&#8221;, I expand &#8220;Query Roles&#8221;, then &#8220;Query Select&#8221;, and check the box for &#8220;mynewbucket&#8221;, and then &#8220;Save&#8221; to finalize the user.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06602-create-new-user-with-select-authorization.gif\" alt=\"Create a new user with authorization to run a select query\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_authorization_in_action\">Authorization in action<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>When I log out of the administrator account, and log back in as &#8220;Matt&#8221;, I can see that the authorization level I have is severely restricted. Only &#8220;Dashboard&#8221;, &#8220;Servers&#8221;, &#8220;Settings&#8221;, and &#8220;Query&#8221; are visible. If I go to &#8220;Query&#8221; I can execute <code>SELECT 1<\/code>;<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06603-execute-select-query.png\" alt=\"Execute SELECT query logged in with only Query authorization\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>If I try something more complex, like <code>SELECT COUNT(1) FROM mynewbucket<\/code>, I\u2019ll get an error message like:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">[\r\n  {\r\n    \"code\": 13014,\r\n    \"msg\": \"User does not have credentials to access privilege cluster.bucket[mynewbucket].data.docs!read. Add role Data Reader[mynewbucket] to allow the query to run.\"\r\n  }\r\n]<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>So, it looks like I have the correct authentication to log in, and I have the correct authorization to execute a <code>SELECT<\/code>, but I don\u2019t have the correct authorization to actually read the data. I\u2019ll go back in as admin, and add Data Reader authorization.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06604-user-with-two-authorization-roles.gif\" alt=\"User now has authorization for two roles\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>At this point, when I login with &#8220;Matt&#8221;, <code>SELECT COUNT(1) FROM mynewbucket;<\/code> will work. If you are following along, try <code>SELECT * FROM mynewbucket;<\/code>. You\u2019ll get an error message that no index is available. But, if you try to <code>CREATE INDEX<\/code> you\u2019ll need another permission to do that. You get the idea.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_new_n1ql_functionality\">New N1QL functionality<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>There\u2019s some new N1QL functionality to go along with the new authentication and authorization features.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_grant_and_revoke_role\">GRANT and REVOKE ROLE<\/h3>\n<div class=\"paragraph\">\n<p>You can grant and revoke roles with N1QL commands. You need Admin access to do this.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Here\u2019s a quick example of granting <code>SELECT<\/code> query authorization to a user named &#8220;Matt&#8221; on a bucket called &#8220;mynewbucket&#8221;:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>GRANT ROLE query_select(`mynewbucket<\/code>) TO Matt;`<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>And likewise, you can REVOKE a role doing something similar:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><code>REVOKE ROLE query_select(`mynewbucket<\/code>) FROM Matt;`<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_creating_users_with_rest\">Creating users with REST<\/h3>\n<div class=\"paragraph\">\n<p>There is no way (currently) to create users with N1QL, but you can use the REST API to do this. Full documentation is coming later, but here\u2019s how you can create a user with the REST API:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>PUT to the <code>\/settings\/rbac\/users\/builtin\/&lt;username&gt;<\/code> endpoint.<\/li>\n<li>Use admin credentials for this endpoint (e.g. Administrator:password with basic auth)<\/li>\n<li>The body should contain:\n<div class=\"ulist\">\n<ul>\n<li>roles=&lt;role1,role2,\u2026\u200b,roleN&gt;<\/li>\n<li>password=&lt;password&gt;<\/li>\n<\/ul>\n<\/div>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Below is an example. You can use cURL, <a href=\"https:\/\/www.getpostman.com\/\">Postman<\/a>, <a href=\"https:\/\/www.telerik.com\/fiddler\">Fiddler<\/a>, or whatever your favorite tool is to make the request.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>URL: <code>PUT <a class=\"bare\" href=\"https:\/\/localhost:8091\/settings\/rbac\/users\/builtin\/restman\">https:\/\/localhost:8091\/settings\/rbac\/users\/builtin\/restman<\/a><\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Headers: <code>Content-Type: application\/x-www-form-urlencoded<br \/>\nAuthorization: Basic QWRtaW5pc3RyYXRvcjpwYXNzd29yZA==<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Body: <code>roles=query_select[mynewbucket],query_update[mynewbucket]&amp;password=password<\/code><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><em>The above assumes that you have an admin user\/password of Administrator\/password (hence the basic auth token of QWRtaW5pc3RyYXRvcjpwYXNzd29yZA==).<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>After executing that, you\u2019ll see a new user named &#8220;restman&#8221; with the two specified permissions.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06605-create-new-user-with-rest.png\" alt=\"Create a new user with a REST command\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_wait_there_s_more\">Wait, there\u2019s more!<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>The RBAC system is far too rich to cover in a single blog post, and full documentation is on its way. In the meantime, here are some details that might help you get started with the preview:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>You may have noticed the <code>all<\/code> option in the screenshots above. You can give a user roles on a bucket-by-bucket basis, or you can give permission to <strong>all<\/strong> buckets (even buckets that haven\u2019t been created yet).<\/li>\n<li>I covered FTS permissions in the previous blog post, but there are permissions that cover just about everything: views, bucket administration, backup, monitoring, DCP, indexes, etc.<\/li>\n<li>You can\u2019t create buckets with a password anymore. The equivalent is to instead create a user with the name as the bucket, and give it authorization to a role called &#8220;Bucket Full Access&#8221;. This will be useful for upgrading and transitioning purposes.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_we_still_want_your_feedback\">We still want your feedback!<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Stay tuned to the <a href=\"https:\/\/www.couchbase.com\/blog\/\">Couchbase Blog<\/a> for information about what\u2019s coming in the next developer build.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Interested in trying out some of these new features? <a href=\"https:\/\/couchbase.com\/download\/\">Download Couchbase Server 5.0 April 2017 Developer Build<\/a> today!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>The 5.0 release is fast approaching, but we still want your feedback!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Bugs<\/strong>: If you find a bug (something that is broken or doesn\u2019t work how you\u2019d expect), please file an issue in our <a href=\"https:\/\/issues.couchbase.com\">JIRA system at issues.couchbase.com<\/a> or submit a question on the <a href=\"https:\/\/www.couchbase.com\/forums\/\">Couchbase Forums<\/a>. Or, contact me with a description of the issue. I would be happy to help you or submit the bug for you (my Couchbase handlers let me take selfies on our cartoonishly big couch when I submit good bugs).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Feedback<\/strong>: Let me know what you think. Something you don\u2019t like? Something you really like? Something missing? Now you can give feedback directly from within the Couchbase Web Console. Look for the <span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/04\/06606-feedback-icon.png\" alt=\"feedback icon\" \/><\/span> icon at the bottom right of the screen.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>In some cases, it may be tricky to decide if your feedback is a bug or a suggestion. Use your best judgement, or again, feel free to contact me for help. I want to hear from you. The best way to contact me is either <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a> or email me <a href=\"mailto:matthew.groves@couchbase.com\">matthew.groves@couchbase.com<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Authorization and authentication are important to Couchbase. In March, I blogged about some of the new Role Based Access Control (RBAC) that we are showing in the Couchbase Server 5.0 Developer Builds. This month, I\u2019d like to go into a [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":3004,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1813],"tags":[1455,1456,1903],"ppma_author":[8937],"class_list":["post-3332","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-security","tag-authentication","tag-authorization","tag-rbac"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Authorization &amp; Authentication with RBAC (Part 2) - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Authentication and authorization are important to Couchbase. I&#039;d like to go into more detail now that the April Couchbase 5.0 Developer Build is available.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Authorization &amp; Authentication with RBAC (Part 2)\" \/>\n<meta property=\"og:description\" content=\"Authentication and authorization are important to Couchbase. I&#039;d like to go into more detail now that the April Couchbase 5.0 Developer Build is available.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-24T18:30:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:29:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1125\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Authorization &amp; Authentication with RBAC (Part 2)\",\"datePublished\":\"2017-04-24T18:30:54+00:00\",\"dateModified\":\"2025-06-14T02:29:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/\"},\"wordCount\":1100,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\",\"keywords\":[\"authentication\",\"authorization\",\"RBAC\"],\"articleSection\":[\"Couchbase Server\",\"Security\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/\",\"name\":\"Authorization &amp; Authentication with RBAC (Part 2) - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\",\"datePublished\":\"2017-04-24T18:30:54+00:00\",\"dateModified\":\"2025-06-14T02:29:03+00:00\",\"description\":\"Authentication and authorization are important to Couchbase. I'd like to go into more detail now that the April Couchbase 5.0 Developer Build is available.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg\",\"width\":1125,\"height\":750,\"caption\":\"NoSQL has built-in security with Couchbase\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Authorization &amp; Authentication with RBAC (Part 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Authorization &amp; Authentication with RBAC (Part 2) - The Couchbase Blog","description":"Authentication and authorization are important to Couchbase. I'd like to go into more detail now that the April Couchbase 5.0 Developer Build is available.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/","og_locale":"en_US","og_type":"article","og_title":"Authorization &amp; Authentication with RBAC (Part 2)","og_description":"Authentication and authorization are important to Couchbase. I'd like to go into more detail now that the April Couchbase 5.0 Developer Build is available.","og_url":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-04-24T18:30:54+00:00","article_modified_time":"2025-06-14T02:29:03+00:00","og_image":[{"width":1125,"height":750,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Authorization &amp; Authentication with RBAC (Part 2)","datePublished":"2017-04-24T18:30:54+00:00","dateModified":"2025-06-14T02:29:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/"},"wordCount":1100,"commentCount":5,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","keywords":["authentication","authorization","RBAC"],"articleSection":["Couchbase Server","Security"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/","url":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/","name":"Authorization &amp; Authentication with RBAC (Part 2) - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","datePublished":"2017-04-24T18:30:54+00:00","dateModified":"2025-06-14T02:29:03+00:00","description":"Authentication and authorization are important to Couchbase. I'd like to go into more detail now that the April Couchbase 5.0 Developer Build is available.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/03\/059-Hero-Key-Locks-Security-Authentication-Authorization-e1657658890360.jpeg","width":1125,"height":750,"caption":"NoSQL has built-in security with Couchbase"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/authentication-authorization-rbac-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Authorization &amp; Authentication with RBAC (Part 2)"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves is a guy who loves to code.  It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything.  He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s.  He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community.  He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3332","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=3332"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3332\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/3004"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=3332"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=3332"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=3332"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=3332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}